我对stackoverflow和socket编程非常陌生
我想一次打开两个服务器端口,并使用python3将它们用于不同的用途
我可以得到socketfd=3,但最终它变成了fd=-1和[关闭],为什么? 我在RaspberryPi操作系统和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
语句中获取套接字,所以当with
块完成时,它就会释放套接字。试试这个:相关问题 更多 >
编程相关推荐