Python Socket绑定5555端口报错无法使用的问题咨询
5555端口绑定报错的原因及修复方法
核心原因
5555端口初始可用、后续绑定失败,基本是两类情况:
- 之前运行服务端时没有正常退出进程,操作系统将端口置于
TIME_WAIT状态,默认会等待1~2分钟的超时时间才会释放端口,这段时间内重复绑定会直接报错 - 端口被其他后台进程抢占,最常见的是安卓ADB调试服务、安卓模拟器默认就会占用5555端口,如果你开过手机调试、模拟器相关程序,很容易出现端口被抢的情况
排查步骤
- 先确认端口占用主体:
- Windows系统打开命令提示符,执行
netstat -ano | findstr :5555,返回结果最后一列是占用端口的进程PID,去任务管理器找到对应PID的进程结束即可 - Linux/macOS系统执行
sudo lsof -i :5555,可以直接看到占用端口的进程名,杀掉对应PID的进程就能释放端口
- Windows系统打开命令提示符,执行
- 如果查到端口处于
TIME_WAIT状态、没有对应实体进程占用,不需要等待系统自动释放,通过socket参数配置即可直接复用端口。
修复方式
不需要强制更换端口,在创建socket对象之后、执行bind操作之前,加一行地址复用的配置即可解决TIME_WAIT导致的绑定失败问题:
s= sct.socket(sct.AF_INET, sct.SOCK_STREAM) # 新增下面这行配置 s.setsockopt(sct.SOL_SOCKET, sct.SO_REUSEADDR, 1)
加上这个配置后,哪怕端口处于TIME_WAIT状态,程序也可以正常绑定端口启动服务。
附带的代码问题修正
你贴的未完成代码里还有几个会影响运行的小问题,一并说明:
reply=data.decod('utf-8')存在拼写错误,正确方法名是decode,少写了末尾的e,运行时会触发方法不存在的报错info函数的颜色判断分支只写了全拼的颜色值(如red/blue),但后续调用时传了简写值('y'/'b'/'c'),会导致日志打印时颜色不生效- 主循环里的
except:pass会直接吞掉所有运行时异常,后续如果出现权限不足、网卡断开等问题,你看不到任何报错信息,不利于排查,建议至少把异常内容打印出来。
内容的提问来源于stack exchange,提问作者LORD_M.D
相关产品推荐
相关产品推荐

