安卓6.0以后,socket连接失败的原因

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/guo909022/article/details/79978062

老早以前的项目要适配安卓7.0的平板电脑

-

信心满满的以为无缝适配,结果使用nio的socketchannel连接tcpserver时,一直连接失败,而同样的程序在5.0的安卓平板上就秒连,纳闷了,开始无头苍蝇似的乱撞,直接用socket也失败。
后来看到一个前辈的socket连接代码,connect之前调用了Thread.sleep方法睡了1000ms
抱着试一试的心态,在connect之前和之后各加了一行Thread.sleep(1000)居然成功了,

//socket连接
socketChannel = SocketChannel.open();
isa = new InetSocketAddress(ip, port);
Thread.sleep(1000);
socketChannel.connect(isa);
Thread.sleep(1000);
socketChannel.socket().setReceiveBufferSize(128);
socketChannel.configureBlocking(false);
if (socketChannel.isConnected()) {
     UIUtils.showToastSafe("设备连接成功");
    isConnected =true;
}
while(isConnected){
    //do something
    ByteBuffer buf = ByteBuffer.allocate(128);
    if((socketChannel.read(buf))>0) {
        updateReceivedData(buf.array(),innerHandler);
        buf.flip();
    }
}

总结
socketChannel.isConnected()返回的结果虽然是true,但是实际并不一定连接成功,可能正在努力连接。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页