java 安卓 物联网_Android 物联网socket通信采坑

在尝试实现Android物联网TCP通信时,遇到设备连接到192.168.8.0:8080失败的问题,错误显示为ENETUNREACH。通过更换IP地址为192.168.8.1,成功解决连接问题。可能是192.168.8.0和192.168.8.255作为特殊地址导致的网络不通。寻求网络知识的大佬指导原因。
摘要由CSDN通过智能技术生成

1.背景

770058b0fb1a66743f451077d62145f7.png

本身要实现一个简单的物联网App,硬件设备开启局域网wifi,手机连接WIFI后进行TCP通信,但就这么简单的应用却遇到坑了,在这里记录一下;

2.问题

276093cb04f0f3c8a9399d4333e8fac3.png

在测试硬件设备串口WIFI功能时遇到了奇怪的现象,在上图中设备以AP模式开启Wifi,客户端设备断开其他网络通道(手机关闭数据流量、PC拔掉网线)后连接此wifi,结果除PC端连接正常外,移动设备(ios与Android)都出现了TCP连接失败,ios端可以ping通192.168.8.0;

查看Socket连接报错日志如下:

java.net.ConnectException: failed to connect to /192.168.8.0 (port 8080) from /:: (port 0): connect failed: ENETUNREACH (Network is unreachable)

at libcore.io.IoBridge.connect(IoBridge.java:143)

at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)

at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)

at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)

at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)

at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)

at java.net.Socket.connect(Socket.java:621)

at java.net.Socket.connect(Socket.java:570)

at java.net.Socket.(Socket.java:450)

at java.net.Socket.(Socket.java:218)

at top.luchenxi.lgrswifitest.TcpClient.run(TcpClient.java:60)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)

at java.lang.Thread.run(Thread.java:919)

Caused by: android.system.ErrnoException: connect failed: ENETUNREACH (Network is unreachable)

at libcore.io.Linux.connect(Native Method)

at libcore.io.ForwardingOs.connect(ForwardingOs.java:95)

at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:136)

at libcore.io.ForwardingOs.connect(ForwardingOs.java:95)

at libcore.io.IoBridge.connectErrno(IoBridge.java:157)

at libcore.io.IoBridge.connect(IoBridge.java:135)

... 13 more

connect failed: ENETUNREACH (Network is unreachable),而并非是 ETIMEDOUT

尝试在以上连接下,局域网内各客户端进行通信,出现如下情况:

9434b413089de778df4ee695c0b9cb56.png

由于对网络知识的匮乏,经过好几天的无脑尝试(更换测试工具、更换测试手机品牌、客户端配置固定IP、配置网关、配置DNS、联系串口wifi供应商等),最后尝试修改设备串口wifi模块服务IP后,居然…神奇的解决了!!!!!!

改动如下:

将服务器IP:192.168.8.0 修改为 192.168.8.1

a898cb5dc740003f323faf93e7395e1e.png

3.原因

大概原因为192.168.8.0/24 与 192.168.8.255/24这个两个地址比较特殊,百度上有种说法是一个为域地址一个为广播地址,这两个地址并不在192.168.8.0/24这个网段中。

但是如果不在一个网段中,为什么PC端能够连接呢?

有大佬指导原因的话麻烦指导下!!不胜感激!!

本文地址:https://blog.csdn.net/fh_luchenxi/article/details/108583763

希望与广大网友互动??

点此进行留言吧!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值