[英]What happens to data received by a socket in case of timeout exception during readShort()?
我正在使用TCP套接字开发客户端(Java)/服务器(C ++)应用程序。 我使用的协议由以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(),...
谢谢你的帮助,
未指定。 我相信该实现方式的工作方式是丢失一半数据,但是无论如何都没有写任何其他内容,因此您只需要假设最坏的情况即可。
但是,实际上,如果您在发件人处观察到常识,则极不可能发生这种情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.