我正在编写一个Python客户端,它连接服务器中的简单套接字(也用Python编写)。我希望在服务器中的连接被拒绝时阻止客户端终止。换句话说,我想让客户端每隔30秒“搜索”一次服务器(如果没有连接)。
以下是我编写的代码,但是当连接从服务器终止时,客户端会返回拒绝连接的错误,并自行终止。
代码:
#!/usr/bin/python
import socket
import time
while True:
sock = socket.socket()
host = socket.gethostname()
port = 4444
conn = sock.connect((host,port))
while(conn != None):
print 'Waiting for the server'
time.sleep(30)
sock = socket.socket()
host = socket.gethostname()
port = 4444
conn = sock.connect((host,port))
while True:
recv_buf = sock.recv(1024)
if (recv_buf == 'exit'):
break
print(recv_buf)
sock.send('hi server')
错误:
Traceback (most recent call last): File "s_client.py", line 12, in
conn = sock.connect((host,port))文件“C:\ Program Files \ python27 \ lib \ socket.py”,第224行,在meth return getattr(self._sock,name)(* args)socket.error:[Errno 10061]─ίΊ▐ΪάΊΊάΪ▐ύϊύΉώΎΫ±ή▀ά≤²Ίϊί≤ύ≥,
所以任何想法,这将有助于不终止客户端,但让它不断寻找服务器,是值得欢迎的。
答案 0 :(得分:2)
使用try
- except
:
conn = None
while(conn == None):
sock = socket.socket()
host = socket.gethostname()
port = 4444
try:
conn = sock.connect((host,port))
except:
print 'Waiting for the server'
time.sleep(30)
最好避免初始connect
调用并仅通过connect
循环中的while
执行连接。我也进行了一些其他更改,例如将sleep
调用移至except
部分。