关于端口占用问题

来源:4-7 案例实操-TCP基础数据传输-1

量能授官

2018-11-24

老师,我运行git仓库中第四章节的代码时,在server不关闭的情况下,第二次启动client会出现如下错误图片描述
查看tcp连接状态发现client使用的端口20001处于TIME_WAIT状态。百度后得到答案:win下默认TIME_WAIT 时间过长导致
但是修改后发现新的问题,如果使用win默认配置,在server不关闭的情况下,连续两次启动client(使用20001端口)会报上图中的错误,但是使用新端口(20002)连续两次启动client就不会报错,其中20002端口也是处于TIME_WAIT状态。这就与之前的答案相悖。
所以我想问的是:为啥在server不关闭的情况下,第一遍连续两次启动client(端口20001)会报错,而第二遍连续两次启动client(端口20002)不会报错。

写回答

1回答

Qiujuer

2018-11-24

初步怀疑的是20001端口应该是有其他进程也有占用,一般来说这个问题可以通过设置是否复用端口来解决;当然对于帮的端口只能有一个进程进行。

所以需要等待上一个进程结束后下一个进程才能链接。


当Socket调用close后并不是就立即关闭了,一般来说还会进行一定的数据回收,以及资源的复用处理。此时开启新的链接时将会出现上述端口已被占用的问题。


一般情况下是换个端口,或者完全退出进程后可以解决,当然若端口是被咱们的进程占用的情况;如果是其他的程序进程那就不行了,那就需要换个端口了。


一般来说不会出现你上述所说的 20001与20002表现不同的情况的。怀疑还是有进程占用的原因,可以使用命令打印一下端口占用情况。


https://jingyan.baidu.com/article/3c48dd34491d47e10be358b8.html



1
1
量能授官
非常感谢老师的耐心解答!
2018-11-26
共1条回复

Socket网络编程进阶与实战 系统掌握Socket核心技术

理论+实践,系统且深入掌握Socket核心技术,从容应对各种Socket应用场景的不二之选

2316 学习 · 476 问题

查看课程