【发布时间】:2021-05-13 22:18:34
【问题描述】:
我对 stackoverflow 和套接字编程非常陌生。
我想一次打开两个服务器端口,并使用 python3 将它们用于不同的目的。
我可以得到socket fd=3,但最后变成了fd=-1和[关闭],为什么? 我在 RaspberryPi OS 和 MacOS Big Sur 上尝试了这段代码。结果是一样的。
请给我建议。
[代码]
import socket
import select
PORTS = [8080, 8081]
sockets = []
try:
for port in PORTS:
addr = ("0.0.0.0", port)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(addr)
s.listen(1)
print(s)
sockets.append(s)
print("\n\n",sockets)
while True:
continue
except KeyboardInterrupt:
for s in sockets:
s.close()
结果
python3 socket_test.py
<socket.socket fd=3, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 8080)>
<socket.socket fd=3, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 8081)>
[<socket.socket [closed] fd=-1, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>, <socket.socket [closed] fd=-1, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>]
【问题讨论】:
-
你为什么使用
with?您的意思是:s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)? -
感谢您指出代码。这就是问题所在。
标签: python python-3.x sockets select