gpt4 book ai didi

java - 在 Java 中接收时 TCP 套接字挂起

转载 作者:行者123 更新时间:2023-11-30 06:37:00 26 4
gpt4 key购买 nike

我在我的 Java 应用程序中使用 TCP 套接字。我正在尝试使用 readInt() 方法从某个设备接收字节数据。

如果我从设备中获取 4 个字节,则此方法工作正常。但是如果我得到少于 4 个字节,或者什么都没有,那么 readInt() 就会挂起。它被阻止并且不会返回。如果没有数据可接收,它应该抛出 EOFException 异常,但它挂起。

代码:

DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
DataInputStream din = new DataInputStream(socket.getInputStream());

int res = din.readInt();

最佳答案

在套接字关闭之前不会抛出 EOFException

当您尝试读取比可用数据更多的数据时,此方法应该阻止。它仅在套接字关闭时返回 EOFException,因为这是实际的 EOF 条件。如果套接字保持打开状态,它将阻塞,直到它有足够的数据来满足请求。

这是套接字工作方式的基本性质的一部分。要使 Java 的行为有所不同,它必须错误地实现套接字行为。

在组合套接字协议(protocol)时,您应该考虑这一点。为什么要等待接收一个 int 并且只发送一个 int 的一部分?这永远不应该发生。如果你想发送不同类型的数据,你应该首先包含某种报头字节来告诉接收方接下来要发送什么样的数据,这样它就知道如何处理它以及如何处理它。

关于java - 在 Java 中接收时 TCP 套接字挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4052316/

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