Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/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 ';因此"重用端口"';未在Windows 7上定义_Python_Sockets - Fatal编程技术网

Python ';因此"重用端口"';未在Windows 7上定义

Python ';因此"重用端口"';未在Windows 7上定义,python,sockets,Python,Sockets,我找到了多个答案,建议在多个UDP客户端需要在同一端口上侦听广播时使用SO_REUSEPORT socket选项。但是我得到一个错误,这个选项不可用。使用Python2.7 from socket import * s = socket(AF_INET, SOCK_DGRAM) s.setsockopt(SOL_SOCKET, SO_REUSEPORT, 1) try: s.bind(('', MYPORT)) except: print "Error connecting to

我找到了多个答案,建议在多个UDP客户端需要在同一端口上侦听广播时使用SO_REUSEPORT socket选项。但是我得到一个错误,这个选项不可用。使用Python2.7

from socket import *
s = socket(AF_INET, SOCK_DGRAM)
s.setsockopt(SOL_SOCKET, SO_REUSEPORT, 1)
try:
    s.bind(('', MYPORT))
except:
    print "Error connecting to the UDP stream."


Traceback (most recent call last):
  File "qsorder.py", line 119, in <module>
    s.setsockopt(SOL_SOCKET, SO_REUSEPORT, 1)
NameError: name 'SO_REUSEPORT' is not defined
从套接字导入*
s=插座(天线、插座)
s、 setsockopt(SOL_插槽,SO_重用端口,1)
尝试:
s、 绑定(“”,MYPORT))
除:
打印“连接到UDP流时出错。”
回溯(最近一次呼叫最后一次):
文件“qsorder.py”,第119行,在
s、 setsockopt(SOL_插槽,SO_重用端口,1)
NameError:未定义名称“SO_REUSEPORT”

我已经尝试了SO_REUSEADDR,它没有给出错误,但只有一个客户端接收广播。你知道如何解决这个问题吗?

你需要在每个插座上设置
SO\u BROADCAST
选项:

s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)

SO\u REUSEPORT
不是标准的,通常与
SO\u reuseAdr
在支持的地方有相同的含义。

您称之为“广播”是什么?数据报发送到什么地址?udp数据包发送到子网的广播地址(最后八位字节中的255)。我试图在同一台电脑上运行脚本的多个实例,每个实例都在不独占锁定数据报发送到的端口的情况下收听这些广播。使用
255.255.255.0
网络掩码?是/24掩码。至少在这种特殊情况下,广播或单播是否真的有区别该标志本身不起作用,但是在SO_广播和SO_REUSEADDR集合中,它看起来更好,并且多个实例正在接收数据包!是的,这就是我的意思-你两者都需要。哎呀,在您的原始代码中没有看到明显的
SO_BROADCAST
遗漏。更多信息如下: