向各位大虾求救!!!
写一段简单的Android网络通讯程序,发现总是发送数据发了100上下字节(每次8个字节),然后就发不出去了,但是也没有任何异常抛出,检查所有状态都正常。
有谁知道这可能是什么情况?
连接代码是这样的:
mSocket=new Socket(mStrIP, mPort);
mSocket.setTcpNoDelay(true); // disable Nagle algorithm
mSocket.setKeepAlive(true);
mInputStream=mSocket.getInputStream();
mOutputStream = mSocket.getOutputStream();
数据发送代码。(所有错误日志都没有打印出来)
if (socket.isOutputShutdown()) Log.e(TAG, "Output is Shutdown");
if (socket.isInputShutdown()) Log.e(TAG, "Input is Shutdown");
if (socket.isClosed()) Log.e(TAG, "Socket is closed");
if (!socket.isConnected()) Log.e(TAG, "Socket is disconnected");
mOutputStream.write(data);
mOutputStream.flush();
建立网络连接和发送数据都是在同一个后台服务的子线程通过handle的形式处理。
网络环境就是WiFi
1 先判断一下出现问题时,网络的状态是否正常?
2 如果正常,服务器端是否运行正常。如果你连接的后台服务异常了,也会导致终端掉线
3 最后,判断终端的 Socket 连接状态是否正常。其实,直接判断这个就可以了,前面两个只是想知道 Socket 掉线的原因。
谢谢您的回答。
这些全部检查过了,一切正常,Socket仍然处于连接状态,Try语句块没有捕获到任何异常。程序有时能发送几次数据(每次8个字节,是服务器端的一个控制命令)很正常,有时能发送几十次。
还有一个非常奇怪的现象。我的服务器端是一个ARM的嵌入式控制设备,ARM下面再通过串口连接了一个单片机。
我有实现两种8字节的命令,一种是发送到ARM,ARM直接应答的。这种命令不管用这个Android程序发送几次,Socket连接一切正常。
另外一个8字节命令,是发送到ARM,ARM再转发到单片机,单片机处理晚了又会返回一个应答到ARM,再由ARM转发回网络客户端的Android程序。非常奇怪的就是,这一个命令,发多几次,Android这端就发不出去,需要重新连接以后才可以。
可是我非常确定我ARM控制器作为服务器的这端没问题,因为服务器这一段根本就没有收到Android发来的发来的数据。并且,如果我使用另外一个Windows的TCP测试程序发一样的命令,不管发多少次,都没问题。所以非常确定不是ARM控制器这端的问题。
那么,问题就一定出现在Android这一端。不知道是不是跟什么网络参数有关,目前使用的都还是默认参数。如果使用socket.setPerformancePreferences(3, 1, 1);或者socket.setPerformancePreferences(3, 5, 3);调整网络参数,似乎结果更差。
并且到目前为止,试验了两款完全不同的Android手机,结果差不多。
楼主解决了吗,最近也碰到这个问题,头疼
楼主,解决了吗,遇见相似问题了,有什么好的解决办法啊
同问,在 wifi p2p中遇到这样的问题