首页 文章

由于'connection refused'错误导致应用程序无法关闭

提问于
浏览
4

我正在编写一个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(最近一次调用最后一次):文件“s_client.py”,第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 回答

  • 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 调用,并仅通过 while 循环中的 connect 执行连接 . 我也进行了一些其他更改,例如将 sleep 调用移动到 except 部分 .

相关问题