我目前正在学习Python中的Socket编程,并且对于如何选择服务器要监听的端口感到困惑。我知道我不能选择一些特定的范围(最多3000左右?),所以我选择了远高于该数字的端口(确切地说是7777)。
在我的情况下,我想使用不同数量的服务器来测试我的程序(12的倍数最多达到96个)。到目前为止,我正在使用12个服务器代码测试我的程序,将主机分配给localhost
,并将端口号从7777
到7788
。
有时当我运行程序时,Python解释器会显示:
Traceback (most recent call last):
File "/home/myUserName/sockettutorial/sockettest4/ppc1/dir12/nwserver12.py", line 9, in <module>
s.bind((host,port))
File "<string>", line 1, in bind
socket.error: [Errno 98] Address already in use
尽管我已经杀死了所有可能仍在侦听这些端口的相关进程(使用
netstat -plan
检查这些进程的PID),但是:我已经将以下部分包含在我的服务器代码中:
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
我的问题在于尽管出现了错误,程序仍然按预期工作,有时运行程序时根本没有出现这个错误,有时却会出现。不过,这个错误本身有点烦人,如果我想摆脱它,是否有办法让机器/主机为服务器分配可用端口,还是必须手动分配?谢谢大家的回答!
netstat -a | grep "LISTEN"
)时,它是否以称为TIME_WAIT
的模式出现? - HelloWorld