java - 无法读取 Jelly Bean 上的套接字 InputStream

标签 java android sockets inputstream android-4.2-jelly-bean

我有一个 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 代替直接流 - 没有效果。

最佳答案

我之前也看到过同样的错误,虽然这个答案可能看起来离题,但如果它有效,请给我一个机会,让我知道它是否有效,由于某种原因,即使它们在较低的 android 中完全正常工作,套接字在 jellybean 上也有奇怪的行为版本,我解决这个问题的方法是将targetSdkVersion移动到果冻 bean 以及项目的Android属性下的项目构建目标,没有修改一行代码,只是这样,出于某种原因它确实诡计……

希望这会有所帮助。

问候!

关于java - 无法读取 Jelly Bean 上的套接字 InputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15154113/

相关文章:

c# - SQL 正则表达式 WHERE 列 = 'VALUES' 解析器

android - 如何在约束布局中将文本放在 ImageView 的右中心

android - 方法 "join"和类 "DeepCollectionEquality"未定义

file - JMeter Ubuntu : java.net.SocketException:打开的文件太多

c - C语言中的套接字和线程段错误

java - 套接字 java - 初学者

java - 猜谜游戏 - 如何记分

为 Android 构建 Chromium 时缺少/找不到 android_gyp

javascript - 通过 python 套接字将 JSON 传递给 Javascript

java - 查找从给定客户端 IP 创建的 Activity session 数