我正在编写一个 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)) File "C:\Program Files\python27\lib\socket.py", line 224, in meth return getattr(self._sock,name)(*args) socket.error: [Errno 10061] ─ίΊ ▐ΪάΊ ϊΫΊάΪ▐ ύ ϊύΉώΎΫ±ή▀ά ≤²Ίϊί≤ύ≥,
因此,欢迎任何有助于不终止客户端,而是使其不断寻找服务器的想法。
最佳答案
使用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
调用并仅通过 while
循环中的 connect
执行连接。我还进行了一些其他更改,例如将 sleep
调用移动到 except
部分。
关于python - 防止应用程序因 'connection refused' 错误而关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25890631/