gpt4 book ai didi

java - readShort()期间如果出现超时异常,socket接收到的数据会发生什么情况?

转载 作者:行者123 更新时间:2023-12-01 11:30:17 24 4
gpt4 key购买 nike

我正在使用 TCP 套接字开发客户端 (Java)/服务器 (C++) 应用程序。我使用的协议(protocol)由以 2 个字节开头的消息组成,定义了消息内容的类型。所以基本上,接收线程循环等待接收数据。但我想对套接字使用超时来通知其他主机发送数据的时间太长。

receivingSocket.setSoTimeout(durationInMilliseconds);
DataInputStream in = new DataInputStream(receivingSocket.getInputStream());
boolean success = false;
short value = 0;
do {
try {
value = in.readShort();// will throw a SocketTimeoutException in case of timeout, without 2 bytes available from the socket
success = true;
} catch (SocketTimeoutException e) {
/// do something if it happens to often. Otherwise go on with the loop
}
} catch (IOException e) {
/// abort connection in case of other problem
}
} while (!success)

现在,如果接收线程在套接字缓冲区中只有一个可用字节时调用 in.readShort() 会发生什么?该字节是否保留在套接字堆栈上?还是丢失了?在第一种情况下,我可以在下次调用 in.readShort() 时读取它,否则它似乎永远丢失了......

readShort() 这是一个例子,我的问题也代表 readInt(),...

感谢您的帮助,

最佳答案

未指定。我相信实现的方式是丢失一半数据,但无论如何都没有写任何其他内容,所以你只能假设最坏的情况。

但实际上,只要您遵守发件人的常识,这种情况就不太可能发生。

关于java - readShort()期间如果出现超时异常,socket接收到的数据会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30457609/

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