跨网段TCP服务端连接问题

结城 嵌入式-ESP32 5 次阅读 1180 字 发布于 2026-05-16 预计阅读时间: 5 分钟


今天开发Java后端的过程中遇到一个情况,WIFI信号传输出现了跨网段问题,分析了一下原因然后写下来,记录一下不同网段的TCP服务端和客户端如何互通。

我的一个嵌入式项目会启动一个TCP服务端,端口为8088,这个服务端用于处理其余嵌入式设备的WIFI通信。

目前我的电脑内网网段是173.16​网段,IP为173.16.0.66,使用网线连接电脑。

对接这个项目的WIFI模块是192.168​网段,是网关同时是TCP客户端,网关IP是192.168.4.1

将电脑的WIFI连接上这个WIFI模块AP的WIFI,分配到的IP是192.168.4.2,现在的问题是,如何解决让这个WIFI模块内置的TCP客户端连接到我的TCP服务器。

现在的电脑有两个网卡 IP:

  • 有线网卡:173.16.0.66
  • WIFI 网卡:192.168.4.2

WIFI 模块在 192.168.4.0/24​ 网段,模块 IP 是 192.168.4.1

WIFI模块作为 TCP 客户端,只能直接访问同网段的 192.168.4.2,也就是我们的电脑WIFI网卡。

WIFI模块网关地址为192.168.4.1

电脑的网关地址为173.16.0.1

默认情况下,不同网段的IP无法互相通信。它无法直接访问 173.16.0.66​,除非你额外配置路由、NAT 或桥接。电脑与WIFI模块不是同一个网段,默认环境直接连接必然不互通。所以直接配置连接173.16.0.66必然不行。

最后研究出来的解决方案很简单,修改TCP服务端的监听地址,使其监听所有网卡信息活动。此时TCP服务端会监听你的设备所有网卡地址,包括但不限于电脑的WIFI网卡。

让 WIFI 模块连接你的 TCP 服务端,目标地址填 192.168.4.2:8088。这个地址是电脑的WIFI网卡的地址,因为开启了全网卡监听,所以WIFI网卡也会成为有效的TCP服务器访问地址。

请确保你的 TCP 服务端监听在 WIFI 网卡上,或者监听 0.0.0.0:8088

需要注意,能连上不是因为WIFI模块在 192.168.4.1​ 跨网段访问了 173.16.0.66​,而是因为它实际连接的是你电脑 WiFi 网卡上的 192.168.4.2:8088

它们处于一个网段可以直接二层通信,不需要路由器,也不需要访问 173.16.0.66。而TCP服务器现在监听了电脑所有网卡,

这里再解释一下0.0.0.0的IP配置

0.0.0.0 不是某一个具体 IP。它表示“监听本机所有 IPv4 网卡地址”。

以我的电脑来说,电脑当前有这些地址:

  • 有线网卡:173.16.0.66
  • WiFi 网卡:192.168.4.2

因此同一个 TCP 服务同时接受:

  • 173.16.0.66:8088
  • 192.168.4.2:8088
  • 127.0.0.1:8088
  • 其他本机 IPv4 地址上的 8088

概念说完了,下面是简化版的配置步骤。

1.确认 Java TCP 服务监听地址

验证方式:Windows 执行 netstat -ano | findstr :8088

如果看到 0.0.0.0:8088,说明所有网卡都能访问。

如果看到 173.16.0.66:8088,说明只监听有线网卡,WIFI 模块连不上,此时需

要修改TCP服务端监听地址。

2.修改 TCP 服务监听地址

推荐监听:0.0.0.0:8088

或者监听 WIFI 网卡:192.168.4.2:8088

注意,此方式只监听WIFI网卡,电脑网卡会被忽略。

3.配置 WIFI 模块 TCP 客户端

目标 IP 填:192.168.4.2​。目标端口填:8088

不要填 192.168.4.1,此IP是WIFI模块自己的网关与IP地址。

也不要填 173.16.0.66,它不在模块直连网段内,这是电脑有线网卡IP。

4.检查项目IP端口绑定配置

如果项目里有类似配置,配置TCP服务端的绑定IP:

server.host=173.16.0.66
tcp.host=173.16.0.66
tcp.bind-address=173.16.0.66

因为WIFI模块与电脑不在一个网段,应改成:

server.host=0.0.0.0
tcp.host=0.0.0.0
tcp.bind-address=0.0.0.0

总结一下最后的配置流程:

  1. 电脑 WIFI IP:192.168.4.2
  2. TCP 服务端监听:0.0.0.0:8088
  3. WIFI 模块 TCP 客户端目标:192.168.4.2:8088
  4. 检查后端确认连接成功,模块与后端成功通信
给时光以生命,给岁月以文明
最后更新于 2026-06-15