【发布时间】:2021-05-15 06:06:29
【问题描述】:
我有一个代码,其中包含与此类似的内容,可在 Linux 中使用。现在我想将它移植到 Windows。我知道 Windows 使用 winsock 进行套接字编程,但是否也可以在 Windows 中实现这个 python 模块“套接字”?
```
import socket
host = self.config.get_config('BASE_ADDRESS',BASE_ADDRESS_VAL)
port = self.config.get_config('BASE_PORT',BASE_PORT_VAL)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM,socket.IPPROTO_UDP)
if sock is None:
print('could not open socket')
sys.exit(1)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.sock.append(sock)
self.log.info('Listening to %s:%s' % (host, port))
try:
sock.bind((host, int(port)))
except socket.error as msg:
print('Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1])
sys.exit()
#sock.bind(("10.0.0.1", ""))
while self.winParent.ongoing==True:
try:
r,w,e = select.select(self.sock, [], self.sock,self.timeout)
for sock in r:
data, addr = sock.recvfrom(556)
#something = sock.recvfrom(556)
#print(something[0].decode())
self.handle(sock, addr, data)
except (Exception, e):
import traceback
self.log.critical('%s\n%s' % (str(e), traceback.format_exc()))
time.sleep(1)
for sock in self.sock:
sock.close()
self.sock = []
My code gets stuck at "r,w,e = select.select(self.sock, [], self.sock,self.timeout)".
On investigating with Wireshark, I can see the following:
[1]: https://i.stack.imgur.com/zNxKH.png
I have the following points of doubt :
(1) Could this be a firewall issue? I have added python.exe to allow through Firewall in Windows Defender. Am I missing something basic?
(2) Should I have the winsock.dll installed separately?
【问题讨论】:
-
socket库可以在 Windows 和 Linux 上运行,为什么要移植它? -
@rozumir 我正在移植一个现在在 Linux PC 上运行的代码库,以便在 Windows PC 上运行。而这个套接字编是它的一部分。我无法在我的 PC 和通过 PoE 连接的硬件之间建立套接字通信。我想知道这个 python 模块是否适用于 Windows。
-
socket 模块在 Windows 上运行良好。您是否尝试从本地机器发送数据报?
标签: python linux windows sockets firewall