我有一个非常简单的Python代码bind
或connect
到一个端口。它的工作没有任何错误的Ubuntu
和CentOs
,但我有一个错误的Windows 10
。我关闭了防火墙和防病毒,但它没有帮助。
我的代码:
import socket
port = 9999
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
try:
s.connect((host,port))
except:
s.bind((host, port))
s.listen(1)
print("I'm a server")
clientsocket, address = s.accept()
else:
print("I'm a client")
Windows 10上的错误:
Traceback (most recent call last):
File "win.py", line 11, in <module>
s.connect((host,port))
ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it
During the handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "win.py", line 13, in <module>
s.bind((host, port))
OSError: [WinError 10022] An invalid argument was supplied
编辑:
我发现我的问题是在Try... Except
部分,如果我把这个代码在两个文件中我的问题会解决。但为什么?try except
不能在Windows中正常工作?
1条答案
按热度按时间fkaflof61#
connect()
失败,因为没有服务器套接字侦听(host,port)
。bind()
失败是因为您无法绑定到主机名,只能绑定到IP地址。除非您只想侦听特定的网络接口,否则您应该绑定到0.0.0.0
以侦听所有接口。