gpt4 book ai didi

java - Android 套接字输入流读取(后跟 EPIPE)

转载 作者:行者123 更新时间:2023-11-29 05:54:46 25 4
gpt4 key购买 nike

我正在创建一些客户端套接字软件来从服务器读取事件。 (例如,流媒体股票报价)。

问题: .read(b); 立即返回值-1。这会导致无限循环,手机会变得很热。此外,对 s.isConnected()、isOpen()、isBound() 的所有检查都返回 true。本质上,套接字看起来已连接。 (这是一个错误场景,因此 .setSoTimeout(x) 的任何值都无效。12 分钟,或留空。.read(b) 总是立即返回 -1)。

当我稍后通过 getOutputStream() 写入它时,我收到一个异常 EPIPE(管道损坏)。

这是核心代码(为简洁起见省略了日志语句/值检查)。

s.connect(new InetSocketAddress(host, port), CONNECT_TIMEOUT_MILLIS);

byte[] b = new byte[1024];
while (s.isConnected()) {
int bytesToRead = s.getInputStream().read(b);
if (bytesToRead <= 0) {
LOGGER.debug("no bytes read? trying again.");
continue;
}
processFrame(b);
}

如果我在手机上循环 3g,它工作正常。有时它会进入这种奇怪的状态。

问题

我做错了什么吗?这是预期的行为吗?是否有我可以查看的现有代码来展示在 Android 上进行套接字编程的正确方法?

最佳答案

我使用下面的代码没有问题:

        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
myLineProcess(line); //here you process you line result
}

祝你好运。

关于java - Android 套接字输入流读取(后跟 EPIPE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12592707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com