python-3.x - 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()
解决方案
推荐阅读
- r - 在 R 中自动绘制不同的图形
- localstack - localstack v0.11.5 和 kcl v1.13.3
- forms - 从第二个子表单组合框中选择值时显示的访问 2016 参数值消息
- vb.net - 将自动完成中键入的文本限制为仅 VB.NET 中的有效字符串
- sql - 案例错误:在预期条件的上下文中指定的非布尔类型的表达式
- electron - 我如何解决为什么 electron-builder 没有创建一个有效的生产包
- 64-bit - 在 risc-v 架构中,mulh[[s]u] 操作返回的位是什么样的?
- django - 在 django 序列化程序响应中,如何摆脱 FileField 的绝对路径(media_url 前缀)?
- java - 为什么 setBackground 方法不改变不可编辑组合框的颜色?
- javascript - 如何使用香草javascript一次只检查一项?