千家信息网

python进程结束后端口被占用怎么解决

发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,本篇内容主要讲解"python进程结束后端口被占用怎么解决",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"python进程结束后端口被占用怎么解决"吧!so
千家信息网最后更新 2025年01月22日python进程结束后端口被占用怎么解决

本篇内容主要讲解"python进程结束后端口被占用怎么解决",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"python进程结束后端口被占用怎么解决"吧!

socket分配

一个服务端进程向操作系统申请一个 scoket 来监听,但是当进程退出后,还未关闭的连接不会立即消失,而是会留给操作系统处理。操作系统会尝试关闭这个连接。但是如果关闭时出现问题,这个连接就会一直处于 TIME_WAIT 或其他非正常状态,而这是相应的端口还处于占用状态,如果这个时候再重新启动这个服务端程序,就会出现地址被占用的情况

例子

测试代码:

import sockets = socket.socket()s.bind(('0.0.0.0', 12345))s.listen()(client, addr) = s.accept()print(client)print(addr)

使用 nc 进行连接:

nc 127.0.0.1 12345

服务端会打印 clientaddr ,然后正常退出,但是此时使用 netstat -anop | grep 12345 查看,发现对应连接并没有被立即释放

tcp        0      0 127.0.0.1:12345         127.0.0.1:59408         TIME_WAIT   -                    timewait (28.18/0/0)

此时再次启动服务端,发现报错了:

Traceback (most recent call last):  File "server.py", line 5, in     s.bind(('0.0.0.0', 12345))OSError: [Errno 98] Address already in use

解决方案

使用 setsockopt

import sockets = socket.socket()s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)s.bind(('0.0.0.0', 12345))s.listen()(client, addr) = s.accept()print(client)print(addr)

此时就不会出现地址被占用的提示了

c 中也有一样的方法,只是方法声明不同, c 版的用法为

struct sockaddr_in addr;addr.sin_family = AF_INET;addr.sin_port = htons(12345);addr.sin_addr.s_addr = htonl(INADDR_ANY);int s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);int reuse = 1;setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse));bind(s, (struct sockaddr *) &addr, sizeof(addr))listen(s, )struct sockaddr_in in_addr;int len = sizeof(in_addr);int client = accept(socket, (struct sockaddr *) in_addr, &len);//handle client//...

其他

  • 发现除了 SO_REUSEADDR 之外还有一个 SO_REUSEPORT 的选项,查询后得知是 BSD 独有的, Linux 并不能用

  • 如果是客户端绑定端口用这个属性可能会出现刚连接上服务器就莫名其妙收到一个 FIN 的问题,导致其立即关闭,因此客户端使用此选项时需注意

到此,相信大家对"python进程结束后端口被占用怎么解决"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

端口 进程 服务 操作系统 方法 系统 内容 地址 客户 客户端 状态 问题 学习 查询 不同 实用 更深 莫名其妙 代码 例子 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 阜新供热站自动化控制软件开发 高性能计算服务器报价 我的世界服务器汉化 相城区正规软件开发专业服务 什么是网络技术开发优缺点 软件开发有哪些编程软件 分公司之间的网络安全设计 延庆区电子计算机软件开发要求 惠州通讯软件开发商家 软件开发应用最广泛的模型 c 智能匹配数据库检索 千里及网络技术有限公司 做网络安全销售行业挣钱吗 查看数据库表的大小 网络安全一级违规罚款 oracle数据库岗位有 软件开发用服务器cpu 信息网络安全等保 怎样合并两个相同的数据库 hp服务器第二个灯 数据库查询并返回时间 黄山市文旅局网络安全培训 网络技术江西大专院校 文件已在协同服务器 内部虚拟冗余网络技术 深圳智慧门禁软件开发怎么样 在服务器上能查到吗 macos搭建mc服务器 传统关系型数据库已被淘汰 徐州市网络安全知识竞赛入口
0