【发布时间】:2013-02-15 17:46:24
【问题描述】:
我有一个 TCP 套接字连接,它在 Android 2.3 上运行良好,但现在在 Android 4.1 上遇到了一些问题。 问题是 InputStream.read() 方法总是返回 -1(没有阻塞),就像连接关闭一样。
创建套接字:
SocketFactory socketFactory = SocketFactory.getDefault();
Socket socket = socketFactory.createSocket("c.whatsapp.net", 5222);
socket.setSoTimeout(3*60*1000);
socket.setTcpNoDelay(true);
检索输入和输出流并写入一些初始数据:
InputStream inputStream = new BufferedInputStream(socket.getInputStream());
OutputStream outputStream = new BufferedOutputStream(socket.getOutputStream());
outputStream.write(87);
outputStream.write(65);
outputStream.write(1);
outputStream.write(2);
outputStream.flush();
那么,这个条件总是通过而不阻塞:
int c = inputStream.read();
if (c < 0) {
Log.d(TAG, "End of stream");
}
此代码在后台线程中运行。它正在开发 Gingerbread。
尝试使用 InputStreamReader 和 OutputStreamWriter 代替直接流 - 没有效果。
【问题讨论】:
-
你检查过 logcat 的输出以及套接字是否被绑定?您是否在清单
uses-permission android:name="android.permission.INTERNET中设置了正确的权限。 -
是的,没有例外。权限存在。
-
我认为自 ICS 以来网络或流逻辑发生了一些变化,但无法猜测到底是什么。以前与
XmlPullParser有类似的问题,它停止与InputStream合作,但请接受InputStreamReader代替:stackoverflow.com/questions/11190494/… -
好的,所以你的代码在后台线程中运行,你没有得到
NetworkOnMainThreadException。抱歉,帮不了你 -
你找到解决这个问题的方法了吗?我也有同样的问题
标签: java android sockets inputstream android-4.2-jelly-bean