【问题标题】:I get Winerror 10038 when i try to reconnect尝试重新连接时出现 Winerror 10038
【发布时间】:2020-02-08 10:25:11
【问题描述】:

Twitch 随机断开我的 python 机器人。我google了很多,发现这是一个常见的问题。唯一的解决方案似乎是自动重新连接。试过这个,但我的知识似乎太有限,无法让它发挥作用。

我尝试关闭套接字,关闭它,然后使用我最初用于连接的相同例程进行连接。尝试了一些变化,但没有任何效果我尝试重新连接时总是得到错误代码:“Winerror 10038”

import socket
import sys
import modules.cfg
import time

irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
irc.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

def connect():
    '''
    Connection to Twitch IRC using cfg.py
    '''
    irc.connect((modules.cfg.HOST,modules.cfg.PORT))
    irc.send(str("PASS " + modules.cfg.PASS + "\r\n").encode("utf-8"))
    irc.send(str("NICK " + modules.cfg.NICK + "\r\n").encode("utf-8"))
    irc.send(str("JOIN " + modules.cfg.CHAN + "\r\n").encode("utf-8"))
    irc.send(str("CAP REQ :twitch.tv/commands\r\n").encode("utf-8")) #whisper enable
    irc.send(str("CAP REQ :twitch.tv/membership\r\n").encode("utf-8"))

def read_chat():
    response = irc.recv(4096).decode('utf-8') #receive text
    if response == "PING :tmi.twitch.tv\r\n":
        print("Ping received")
        irc.send("PONG :tmi.twitch.tv\r\n".encode("utf-8")) 
    return response


def send(msg):
    try:
        irc.send("PRIVMSG {} : {}\r\n".format(modules.cfg.CHAN, msg).encode("utf-8"))
    except:
        irc.shutdown(socket.SHUT_RDWR)
        irc.close()
        print("\n\nDisconnected\n")
        time.sleep(10)
        connect()
        print("Reconnected\n\n")

我对编码很陌生,这是我的某种爱好。希望有人可以帮助我!谢谢各位

【问题讨论】:

  • 您是否考虑过查找 Winsock 错误 10038? '非套接字上的套接字操作'。您已经关闭了套接字,现在正尝试在其上调用 connect()。你必须创建一个新的套接字。
  • 我尝试在 "irc.connect...." 前面添加 "irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)" 行,但也出现错误.. 行我引用的是打开一个新套接字的那个,不是吗? (对不起我的低级知识)
  • 您遇到什么错误?
  • Winerror 10057 如果我在“connect()”内外都有它,并且“irc is not defined”如果只在“read_chat()”内(我实际上理解)编辑:输入时这是我的想法,将它放在“connect()”中并将 t 定义为全局。以前没有想出这个,但也可以。感谢您帮助我更好地理解它。虽然仍然不明白 winerror 10057

标签: python sockets twitch reconnect


【解决方案1】:

感谢 user207421,我终于找到了方法.. 对我来说有点奇怪,但它有效。

def re_connect():
    irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    irc.connect((modules.cfg.HOST,modules.cfg.PORT))
    irc.send(str("PASS " + modules.cfg.PASS + "\r\n").encode("utf-8"))
    irc.send(str("NICK " + modules.cfg.NICK + "\r\n").encode("utf-8"))
    irc.send(str("JOIN " + modules.cfg.CHAN + "\r\n").encode("utf-8"))
    irc.send(str("CAP REQ :twitch.tv/commands\r\n").encode("utf-8")) #whisper enable
    irc.send(str("CAP REQ :twitch.tv/membership\r\n").encode("utf-8"))


def send(msg):
    try:
        irc.send("PRIVMSG {} : {}\r\n".format(modules.cfg.CHAN, msg).encode("utf-8"))
    except:
        irc.shutdown(socket.SHUT_RDWR)
        irc.close()
        print("\n\nDisconnected\n")
        time.sleep(10)
        re_connect()
        print("Reconnected\n\n")

【讨论】:

  • 这正是我告诉你在上面做的,你声称没有用。请解释一下。
  • 有趣的是,当我更改“connect()”以使其看起来像“re_connect”时,我首先在连接时出现错误。这就是我尝试过的。谢谢你,我使用了一个单独的重新连接,现在两者都在工作。连接和重新连接。我感到困惑的是,如果我在“connect()”中定义套接字,则会出现错误
猜你喜欢
  • 1970-01-01
  • 2015-02-06
  • 1970-01-01
  • 1970-01-01
  • 2018-05-29
  • 1970-01-01
  • 2021-09-01
  • 1970-01-01
  • 2017-08-24
相关资源
最近更新 更多