由于拒绝连接而阻止申请关闭'错误

时间:2014-09-17 12:31:55

标签: python sockets

我正在编写一个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]─ίΊ▐ΪάΊΊάΪ▐ύϊύΉώΎΫ±ή▀ά≤²Ίϊί≤ύ≥,

所以任何想法,这将有助于不终止客户端,但让它不断寻找服务器,是值得欢迎的。

1 个答案:

答案 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部分。