You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

同局域网内无法访问Tomcat部署的Web服务,重启电脑才可恢复求彻底解决方案

问题根源分析

我之前在做局域网内Android和Web服务联调时,也踩过几乎一模一样的坑。结合排查经验,你的问题大概率是下面几个原因之一:

  • Tomcat绑定了错误的网卡:电脑通常会有多个网卡(比如有线网卡、无线网卡、虚拟机虚拟网卡),Tomcat启动时可能默认绑定到了非当前局域网的网卡(比如虚拟机的192.168.x.x虚拟网段),导致手机所在的局域网根本访问不到这个绑定地址。而重启电脑后,网卡的加载优先级变化,Tomcat自动绑定到了正确的局域网网卡,问题就暂时解决了。
  • 本地IP动态变化+Tomcat绑定旧IP:如果你的电脑是通过DHCP自动获取局域网IP,IP地址可能会因为租约到期而变化。Tomcat启动时绑定了当时的IP,但后续IP变更后,Tomcat并没有自动切换绑定地址,手机访问原来的IP自然找不到路由。重启电脑后,DHCP重新分配了IP(可能刚好和之前的一样),同时Tomcat绑定了新的正确IP,就恢复正常了。
  • 防火墙拦截未自动放行:Windows防火墙或第三方防火墙,有时候会在Tomcat启动时没能自动识别并放行其监听端口。重启电脑后,防火墙规则重新加载,刚好允许了Tomcat的端口访问,所以连接恢复。
彻底解决的方案

针对上面的根源,逐个给出根治方法:

1. 让Tomcat绑定所有网卡(最稳妥的基础操作)

修改Tomcat的conf/server.xml配置文件,强制Tomcat监听所有可用网卡的请求,避免绑定错网卡的问题:
找到其中的<Connector>标签,添加address="0.0.0.0"属性,示例如下:

<Connector port="8080" protocol="HTTP/1.1"
           address="0.0.0.0"
           connectionTimeout="20000"
           redirectPort="8443"/>

修改后重启Tomcat,它就会监听所有网卡的8080端口,不管电脑用哪个网卡连局域网,手机都能访问。

2. 给电脑设置静态局域网IP

解决DHCP动态IP带来的地址变化问题:

  • 打开Windows的「网络和共享中心」,找到当前连接的局域网网络,点击「属性」
  • 找到「Internet协议版本4 (TCP/IPv4)」,点击「属性」
  • 选择「使用下面的IP地址」,输入:
    • IP地址:选一个和路由器同网段且未被占用的地址(比如192.168.1.100,具体看你的路由器网段)
    • 子网掩码:一般是255.255.255.0
    • 默认网关:填写你的路由器IP(通常是192.168.1.1192.168.0.1
    • DNS服务器:可以填路由器IP,或者公共DNS比如114.114.114.114
  • 设置完成后,电脑的局域网IP就固定了,Android应用里直接用这个静态IP访问即可,再也不会因为IP变化导致连接失败。

3. 手动添加防火墙放行规则

避免防火墙随机拦截Tomcat端口:

  • 打开Windows防火墙的「高级设置」
  • 点击「入站规则」,选择「新建规则」
  • 规则类型选「端口」,点击下一步
  • 选择「TCP」,输入Tomcat的监听端口(比如8080),点击下一步
  • 选择「允许连接」,点击下一步
  • 勾选「域」「专用」(如果你的手机连的是公共WiFi可以勾选「公网」,但一般专用就够),点击下一步
  • 给规则命名(比如「允许Tomcat 8080端口访问」),完成创建
    这样不管Tomcat什么时候启动,防火墙都会放行这个端口的请求,不会再出现拦截问题。

4. 验证Tomcat绑定状态(排查用)

如果之后还出现问题,可以用命令检查Tomcat的绑定情况:
Windows下打开命令提示符,输入:

netstat -ano | findstr 8080

如果输出里的本地地址是0.0.0.0:8080或者你的静态IP:8080,说明绑定正常;如果是127.0.0.1:8080或者其他陌生IP,说明绑定有问题,回到第一步检查server.xml配置。

内容的提问来源于stack exchange,提问作者sabri mahmoud

火山引擎 最新活动