Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python,重新创建套接字并自动重新连接_Python_Irc - Fatal编程技术网

Python,重新创建套接字并自动重新连接

Python,重新创建套接字并自动重新连接,python,irc,Python,Irc,我正在用Python编写一个IRC机器人 来源:(为pastebin感到抱歉,我不知道如何有效/正确地使用此处的代码标记) 当“irc”套接字死机时,我是否可以检测它是否死机,然后自动重新连接 我在谷歌上搜索了一会儿,发现我必须创建一个新的套接字。我尝试并添加了一些东西,比如捕获socket.error,而事实上是这样的:但它似乎只是挂起,没有正确地重新连接 提前感谢您的帮助回答如下: 虽然问题所有者的公认答案有效,但我更喜欢约翰·莱德贝特的答案,因为它简单: 所以,对我来说,我有一些 def

我正在用Python编写一个IRC机器人

来源:(为pastebin感到抱歉,我不知道如何有效/正确地使用此处的代码标记)

当“irc”套接字死机时,我是否可以检测它是否死机,然后自动重新连接

我在谷歌上搜索了一会儿,发现我必须创建一个新的套接字。我尝试并添加了一些东西,比如捕获socket.error,而事实上是这样的:但它似乎只是挂起,没有正确地重新连接

提前感谢您的帮助

回答如下:

虽然问题所有者的公认答案有效,但我更喜欢约翰·莱德贝特的答案,因为它简单:

所以,对我来说,我有一些

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()

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

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()

你有什么代码?如果有连续的数据流要接收,这是否会起作用?似乎它只是在从服务器收到一个空数据包时重新连接?