python - 防止应用程序因 'connection refused' 错误而关闭

标签 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)) 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/

相关文章:

java - 用 SocketChannel.open().socket() 替换 new Socket() 有什么问题吗?

c++ - epoll 或 kqueue 是否可以处理向自身异步添加文件描述符

python - 无法连接到 FreePIE 中的正确 COM 端口

python - 我需要在python中使用 "bigMod algorithm"吗?

Android - 服务器套接字

java - 公共(public) IP 地址更改时本地主机套接字是否受到影响

c - 使用 UNIX 套接字 "zero-length datagrams"的原因是什么?

Python - 读取文件中的行对

python csv到字典列

python - 套接字显然不能在Raspberrypi 4上运行吗?