首页 > 解决方案 > Python套接字“接收数据不允许错误”

问题描述

我有以下代码,它在 Windows 的 Python3 中给了我这个错误:

OSError:[WinError 10057] 不允许发送或接收数据的请求,因为未连接套接字并且(当使用 sendto 调用在数据报套接字上发送时)未提供地址

有人可以帮助解释为什么我会收到此错误以及如何避免它吗?我想要做的是启动 5 个具有不同套接字号的线程并让它们进行非阻塞接收。提前谢谢。

import threading
import socket
import os
import errno
import sys
from time import sleep
HOST = '127.0.0.1'  # Standard loopback interface address (localhost)

def worker(port):
    """thread worker function"""
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.setblocking(False)
        s.bind((HOST, port))
        s.listen()
        print('Thread is listening on', port)
        while True:
            try:
                msg = s.recv(4096)
            except socket.timeout as e:
                err = e.args[0]
                if err == 'timed out':
                    sleep(1)
                    print ('No data available')
                    continue
                else:
                    # a "real" error occurred
                    print (e)
                    sys.exit(1)
            else:
                print (msg)


threads = []
for i in range(10001, 10005):
    t = threading.Thread(target=worker(i))
    threads.append(t)
    t.start()

for thread in threads:
    thread.join()

标签: python-3.xsocketssendrecv

解决方案


推荐阅读