当前位置:  开发笔记 > 编程语言 > 正文

Android处理没有Internet连接的IoT设备

如何解决《Android处理没有Internet连接的IoT设备》经验,为你挑选了0个好方法。

我正在尝试建立一个项目,我必须通过wifi从智能手机试用物联网设备.

此设备集成了SPWF01 Wifi模块,并配置为安全类型为WEP的接入点(无法访问Internet).在此接入点配置中,我们还有一个拦截智能手机通信的TCP套接字服务器.

在智能手机方面,我们有扫描并连接到我们设备的接入点的部分(虽然我因为无法访问互联网而获得wifi图标上的警示点,但它仍可正常工作).在我们连接之后,我们启动Client Socket,它连接到我们的Io​​T设备上的服务器(服务器套接字的ip地址实际上是接入点的网关).这是故障开始的地方,因为客户端套接字无法启动.这是代码:

public void SocketInit(String ip, int port) throws IOException {
    InetAddress addr = InetAddress.getByName(ip);
    SocketAddress sockaddr = new InetSocketAddress(addr, port);
    nsocket = new Socket();
    nsocket.setReuseAddress(true);       
    nsocket.setTcpNoDelay(false);
    nsocket.setReceiveBufferSize(700);   //Must be less than 730byte witch is the module buffer
    nsocket.setSendBufferSize(700);
    nsocket.connect(sockaddr, 5000);     //5 second connection timeout
}

这是我得到的例外:

java.net.SocketException: socket failed: ENONET (Machine is not on the network)

我甚至在到达nsocket.connect()之前就得到了这个错误,正是在setReuseAddress上.

由于我得到的例外是ENONET,我认为必须是因为接入点没有互联网接入,所以我使用此处提出的解决方案进行测试:

adb shell settings put global captive_portal_detection_enabled 0

这是一个解决方案,如果没有root访问权限就无法以编程方式完成,但我想测试这是否是问题所在.但是虽然wifi图标上的感叹号已经消失,但客户端套接字仍然给了我同样的异常错误.

有没有人有这种行为的解决方案?先感谢您!


有时客户端套接字设置打开,成功率为20次中的1次.但是当它发生时,我发送几条消息后通常会得到另一个例外:

java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer)

以下是我用于从智能手机连接到接入点的代码:

    WifiConfiguration wc=new WifiConfiguration();
    wc.SSID= host;
    wc.status = WifiConfiguration.Status.ENABLED;
    wc.priority = 40;
    wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
    wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
    wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
    wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
    wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
    wc.allowedGroupCiphers.clear();
    wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
    wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
    wc.wepKeys[0] = password;
    wc.wepTxKeyIndex = 0;

    int netId=mainWifi.addNetwork(wc);
    try {
        //mainWifi.setWifiEnabled(true);
        mainWifi.disconnect();
        mainWifi.enableNetwork(netId, true);
        mainWifi.reconnect();

        startConnectionCheck = true;
        System.out.println("enabled network");
    } catch (Exception e) {
        e.printStackTrace();
        System.out.println(e.getMessage());
    }

接入点的安全类型是WEP.那是因为wifi模块无法实现WPA.


在棉花糖上进行的测试.

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有