Python,重新创建一个socket并自动重新连接

8
我正在用Python写一个IRC机器人。
源代码:http://pastebin.com/gBrzMFmA(抱歉,我不知道如何在这里高效/正确地使用代码标签)
当"irc"套接字失效时,是否有任何方法可以检测它是否已经失效,并自动重新连接?
我一直在谷歌搜索,发现我需要创建一个新的套接字。我尝试着在while True:中添加捕获socket.error之类的东西,但似乎只是挂起而无法正确地重新连接。
提前感谢您的帮助。

你有什么代码? - User
2个回答

9
此处有答案:Python:检查IRC连接是否丢失(PING PONG?) 尽管问题所有者的已接受答案有效,但出于其简单性,我更喜欢John Ledbetter在这里的答案:https://stackoverflow.com/a/6853352/625919 因此,对我来说,我有一些类似的东西
def connect():
    global irc
    irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    irc.connect((server, port))
    #and nick, pass, and join stuffs
connect()
while True:
    data = irc.recv(4096)
    if len(data) == 0:
        print "Disconnected!"
        connect()

这只有在有连续的数据流接收时才能起作用,如果它从服务器接收到一个空数据包,似乎它只会重新连接? - user1561108

0

这是重新连接套接字的代码

import socket
import time

username = "Manivannan"
host = socket.gethostname()    
port = 12345                   # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connected = False
print("Server not connected")
while True:
  if(not connected):
    try:
        s.connect((host, port))
        print("Server connected")
        connected = True
    except:
        pass
  else:
    try:
        s.sendall(username.encode('utf-8'))
    except:
        print("Server not connected")
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        connected = False
        pass
    time.sleep(5)
s.close()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接