我正在尝试查询()请求主机名和端口,尝试并且如果不成功则尝试连接到默认主机/端口(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:
我试图这样做,如果没有输入任何值,它会转到外部的其他地方以连接到默认的HOST / PORT,否则如果输入的值有效则连接到hostc / portc。
感谢您的时间。
答案 0 :(得分:1)
我同意Sphere的说法,你的问题的代码片段并不完全是pythonic,并且肯定有更好的方法来完成你想要完成的任务。但是,话虽如此,只需要使用您的代码片段 - 我已经修改它以便建立套接字连接。让我知道它是怎么回事:
#!/usr/bin/python
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 validate_ip(ip):
try:
if inet_aton(ip):
return True
except:
return False
def query():
while True:
hostc = raw_input('Host: ')
portc = raw_input('Port: ')
if (portc and validate_ip(hostc)):
try:
tcpCliSock.connect(hostc, int(portc))
break
except:
pass
#print("\nInvalid Entry.\n")
else:
tcpCliSock.connect(ADDR)
break
tcpCliSock = socket(AF_INET, SOCK_STREAM) # allocate client's socket
query()
答案 1 :(得分:0)
您的代码中有一些不是非常“pythonic”的东西,但对于您的问题,我会做类似的事情:
hostc = raw_input('Host: ') or HOST
答案 2 :(得分:0)
这是我自己的问题的更好答案,希望更多的'pythony',谢谢你的球体和ssheth建议它可以做得更好:
parser = argparse.ArgumentParser()
parser.add_argument("--host", type=str, default='localhost',
help="Host other than %(default)s.")
parser.add_argument("--port", type=int, default=21567,
help="Port other than %(default)s.")
args = parser.parse_args()
HOST = args.host
PORT = args.port