【问题标题】:ConnectionAbortedError: [Errno 53] Software caused connection abortConnectionAbortedError: [Errno 53] 软件导致连接中止
【发布时间】:2020-06-17 17:21:28
【问题描述】:

我正在尝试使用多线程为多个套接字建立连接

这是代码

import socket as sc
if __name__ == '__main__':


    #setup()
    ports = [10000, 10010, 10020, 10030]

    init_sockets()
    init_threads()
def init_sockets():

    global host_ip
    global sockets

    host_ip = sc.gethostname()
    sockets = []

    for port in ports:

        socket = sc.socket()
        socket.bind((host_ip, port))
        socket.listen()
        sockets.append(socket)
def init_threads():

    threads = [
        threading.Thread(target= init_connection, args= [socket])
        for socket in sockets
    ]

    for thread in threads:
        thread.start()
def init_connection(socket):

    client, address = socket.accept()

运行代码时出现此错误

ConnectionAbortedError: [Errno 53] Software caused connection abort

函数init_threads()中的thread.start()语句出现错误

我不知道为什么会这样,非常感谢任何帮助。我正在尝试并行运行多个套接字连接,如果这样不可能,我愿意接受建议

【问题讨论】:

  • 代码似乎没问题。我的主机名有问题,但将其更改为 127.0.0.1 解决了它。确保其中一个端口未被其他应用程序使用,

标签: python multithreading sockets python-multithreading python-sockets


【解决方案1】:

解决了!

问题似乎是当主线程(它自己的程序)终止时,它创建的所有对象都被删除,包括套接字对象。

所以当辅助线程(主程序启动的线程)仍在运行时,尝试引用这些已删除的对象会发生错误

对我来说,解决方案似乎是在 main 方法中添加一个无限 while 循环。防止主线程被终止

【讨论】:

  • 是的,习惯上主线程会‘join()’它创建的所有线程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-04
  • 2019-07-28
  • 2016-09-11
  • 2013-08-24
  • 2019-08-02
  • 2016-03-04
  • 2019-01-04
相关资源
最近更新 更多