我正在尝试让query()询问主机名和端口,如果不成功,请尝试连接到默认主机/端口(localhost/21567)。你知道吗
from socket import *
import re
HOST = 'localhost' # server IP
PORT = 21567 # port
BUFSIZ = 1024
ADDR = (HOST, PORT)
ip = re.compile(r'([0-9\.]{1,3}){4}')
def query():
while True:
hostc = raw_input('Host: ')
portc = int(input('Port: '))
if (portc != None & bool(re.match(ip, hostc))):
try:
tcpCliSock.connect(hostc, portc)
break
except:
pass
print("\nInvalid Entry.\n")
else:
tcpCliSock.connect(ADDR)
break
tcpCliSock = socket(AF_INET, SOCK_STREAM) # allocate client's socket
query()
当我什么都不输入时,我得到的是:
Traceback (most recent call last):
File "./tcpclient.py", line 30, in <module>
query()
File "./tcpclient.py", line 17, in query
portc = int(input('Port: '))
File "<string>", line 0
^
SyntaxError: unexpected EOF while parsing
如果我输入一个有效的主机/端口(有一个服务器在这个地址等待):
Host: 192.168.1.103
Port: 21567
Invalid Entry.
Host:
我试图使之成为这样,如果没有输入值,它将转到外部else以连接到默认主机/端口,否则如果输入的值有效,它将连接到hostc/portc。你知道吗
谢谢你抽出时间。你知道吗
我同意Sphere的观点,您的问题的代码片段并不完全是pythonic的,而且肯定有更好的方法来完成您想要完成的任务。不过,尽管如此,我还是对您的代码片段进行了修改,使其能够建立套接字连接。告诉我进展如何:
在你的代码中有一些不太“pythonic”的东西,但是关于你的问题,我会做如下的事情:
hostc = raw_input('Host: ') or HOST
下面是我自己问题的更好答案,希望更多的“Python”,感谢sphere和ssheth建议可以做得更好:
相关问题 更多 >
编程相关推荐