繁体   English   中英

如果在readShort()期间发生超时异常,套接字收到的数据会如何处理?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM