端口被占用,是说客户端想监听的端口已被别的程序占着。常见原因是客户端重复启动、同时运行了其他代理软件、上次异常退出没释放。排查办法是用系统命令查出占用端口的进程,确认无误后结束它,或者在客户端里把端口改成别的未被占用的数值。
端口被占用,是启动客户端时一个很典型的报错:点开客户端,立刻弹出“端口被占用”“bind 失败”之类的提示,或者窗口一闪就没了。这时候别急着重装,问题通常很简单:**客户端想用的那个端口,已经被别的程序占着了。**这篇讲清楚怎么查出是谁占着、怎么处理,以及怎样避免再次发生。
端口被占用,是什么意思
可以把端口想象成门牌号。客户端启动后,会在本机选一个门牌号等着,浏览器等程序把请求送到这个门牌号,客户端再转发出去。同一个门牌号同一时刻只能被一个程序使用,如果已经有人占了,第二个程序就进不去,只能报错。一些客户端的常见默认端口之一是 7890,具体以客户端为准。
端口被占用的常见原因
| 原因 | 说明 | 典型迹象 |
|---|---|---|
| 客户端重复启动 | 已经有一个实例在运行,又启动了第二个 | 任务栏或托盘里已有图标 |
| 上次异常退出 | 进程没有完全结束,端口还没释放 | 刚崩溃或强制关闭之后 |
| 其他代理软件 | 同时运行了另一个也想用同一端口的软件 | 装了多个代理类工具 |
| 无关程序恰好用了该端口 | 别的软件碰巧选了同一个数字 | 排查不到明显的代理类进程 |
排查与处理的顺序
| 步骤 | 做什么 | 为什么 |
|---|---|---|
| 1 | 看托盘和任务管理器,是否已有客户端在运行 | 最常见的情形是重复启动 |
| 2 | 用系统命令查出占用该端口的进程 | 确认到底是谁占着 |
| 3 | 判断这个进程是否可以结束 | 避免误结束重要程序 |
| 4 | 结束进程,重新启动客户端 | 释放端口 |
| 5 | 若总是冲突,改客户端端口 | 避免反复处理 |
第 2 步:怎么查是谁占着
在 Windows 上,可以打开命令提示符,输入下面的命令,把数字换成你的端口:
netstat -ano | findstr :7890
输出的最后一列是进程编号,再用任务管理器的“详细信息”里按编号查到对应的程序名。在 macOS 或 Linux 上,可以用:
lsof -i :7890
它会列出占用该端口的程序名和编号。注意这些命令只用来查看,不会改动系统。
第 3 到 4 步:结束进程,要先确认
找到占用者后,先判断:
- 如果是客户端自己的旧实例,或者你不再需要的代理软件,可以在任务管理器里结束它;
- 如果是不认识的程序,先查它是什么,不要凭感觉结束;
- 如果是系统或其他重要软件,不要强行结束,改用别的端口。
结束之后,重新启动客户端,看是否恢复正常。
第 5 步:改端口,一劳永逸
如果经常冲突,更好的办法是把客户端的端口改掉:
- 打开客户端设置,找到代理端口的选项;
- 改成一个较大的、不常用的数值,避免与常见软件冲突;
- 同步更新系统代理或浏览器里填写的端口,保持一致,否则会出现“开了代理没反应”,对照 开了系统代理没反应;
- 保存并重启客户端,再验证一次。
不同客户端的设置位置不一样,可以参考 Clash Verge Rev Windows 教程 里设置页的说明。
如果启动后立即退出,没有任何提示
有时客户端并不会弹出错误,而是直接退出。这时可以:
- 看客户端的日志文件,里面通常会写明端口冲突或其他原因;
- 检查是否有多个实例或多个代理软件同时在运行;
- 暂时关闭其他可能冲突的软件,再启动试试;
- 在 Clash 报错怎么办 里对照常见的报错信息。
不同系统上,处理起来有什么差别
整体思路相同,但具体操作略有差别:
| 系统 | 查占用的做法 | 结束进程的做法 | 注意点 |
|---|---|---|---|
| Windows | 命令提示符里用 netstat 配合进程编号 | 任务管理器的“详细信息”里结束对应进程 | 以管理员身份打开命令提示符更完整 |
| macOS | 终端里用 lsof 查看端口 | 活动监视器里找到进程并退出 | 系统自带的进程不要强行结束 |
| Linux | 终端里用 lsof 或 ss 查看 | 用 kill 命令按进程编号结束 | 先不带强制参数尝试,再考虑强制 |
无论哪种系统,都建议先确认占用者是什么,再动手。想了解不同客户端的具体设置位置,可以对照各自的手册文章。
改了端口之后,这些地方要同步
端口改完不是结束,下面几处也需要保持一致,否则会出现“开了没反应”:
- 系统代理里填写的地址和端口;
- 浏览器或扩展里单独设置的代理端口;
- 命令行工具里通过环境变量设置的代理端口;
- 其他依赖该端口的程序,比如某些开发工具;
- 如果设置了开机自启,确认下次启动后端口仍然生效。
改完之后,用一个国外网站和一个国内网站各验证一次,再记下新端口,避免以后忘记。
预防:让冲突少发生
- 退出客户端时选择“退出”,而不是强制结束;
- 同一时间只运行一个负责代理的软件;
- 不随意修改客户端默认端口,改了要做好记录;
- 开机自启的程序里,检查有没有重复的代理类软件;
- 升级客户端后,先确认旧版本已经完全退出。
同时用多个代理软件,要怎么配合
有些人为了试用不同客户端,会同时装好几个。想让它们和平共处,可以遵循几个原则:
- 每次只运行一个,换用时先完全退出另一个;
- 如果确实要同时运行,给它们分配不同的端口,并分别做好记录;
- 系统代理同一时间只指向一个,避免被互相覆盖;
- 开机自启只保留一个,其余手动启动。
这几条做到了,端口冲突基本就不会再来打扰你。
下一步
如果端口问题解决后仍然上不了网,说明问题出在别处,可以继续看 TUN 模式开启失败,或者回头用 选机场向导 确认订阅与客户端是否匹配。端口被占用大多只是个小冲突,查出占用者,问题就解决了一大半。
还有一个习惯值得养成:遇到端口问题,先别急着重启电脑,花一分钟查清是谁占着。弄明白原因再处理,比靠重启碰运气更踏实,也能避免同样的问题反复出现。
- 命令和界面因系统与客户端版本而异,本文给的是通用做法,请以你的系统和客户端说明为准。
- 结束进程前请先确认它不是重要的系统程序,不确定时不要强行结束。
- 本文只涉及本机的端口冲突,不涉及机场节点本身的端口。
资料里明确写了支持 Clash 的几家
把 Clash 写进客户端栏的品牌很少。没写不等于不能用,多数机场都能给 Clash 格式的订阅,只是档案里找不到可以核对的说法。
看 Clash 上手手册 → 数据来自机场档案,价格以官网结账页为准。
这篇的几个常见问题
为什么会提示端口被占用?
客户端启动时要在本机监听一个端口,供浏览器等程序把流量交给它。如果这个端口已经被别的程序占着,系统就不允许第二个程序再用,客户端于是报错。常见的占用者有:上一次没有正常退出的客户端、同时运行的另一个代理软件、碰巧使用了同一端口的其他程序。
可以直接把端口改成别的数字吗?
可以。在客户端设置里把代理端口改成一个未被占用的数值即可,改完要同步更新系统代理或浏览器里填写的端口,保持一致。注意选择一个不常用的较大数值,避免和别的程序再次冲突。
结束占用端口的进程安全吗?
如果确认它是上一次异常退出的客户端或你不再需要的代理软件,结束它通常没有问题。但如果不认识这个进程,先别结束,查一下它是什么,或者改用别的端口。涉及系统关键程序的,不要强行结束。
重启电脑能解决吗?
通常能,因为重启会结束所有占用端口的程序。但这只是临时办法,如果是开机自启的另一个软件在占用,重启后问题还会出现。更好的办法是找到占用者,决定是关闭它还是改端口。