在本地测试项目代码时,突然报错:
bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
项目代码没有问题,但是报错端口被占用
原因
系统为每个TCP 连接分配一个TCP 控制块(TCP control block or TCB),这个控制块用于缓存TCP连接的一些参数(源端口、目的端口、目的ip、序号、应答序号、对方窗口大小、己方窗口大小、tcp状态、tcp输入/输出队列、应用层输出队列、tcp的重传有关变量等)
而tcb控制块并不是断开TCP连接后直接释放,而是要等待TCP连接time_wait时间之后再释放。因此当我们短时间频繁的启动退出操作后,系统可用的tcp连接数被用尽,且之前断开的tcp还没到time_wait时间没有得到释放,就会报错端口被占用
解决方法
1.终端查询占用端口的进程内容
netstat -aon|findstr "使用端口号" 例:netstat -aon|findstr "8080"
2.终止查到的进程PID
taskkill -F -PID 进程号 例:taskkill -F -PID 21064
然后再启动项目发现能够正常运行了