[英]Taking input for HOST/PORT else connect with default HOST/PORT
我正在嘗試讓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:
我試圖這樣做,以便如果沒有輸入任何值,則轉到外部以連接到默認的HOST / PORT,否則,如果輸入的值有效,則它將連接到hostc / portc。
感謝您的時間。
我同意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()
您的代碼中有一些不太“ pythonic”的東西,但是對於您的問題,我會做類似的事情: hostc = raw_input('Host: ') or HOST
這是對我自己的問題的更好的答案,希望是更多的“ pythony”,感謝sphere和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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.