当前位置: 首页 > 知识库问答 >
问题:

在readShort()期间发生超时异常时,套接字接收到的数据会发生什么情况?

郦兴德
2023-03-14

我正在开发一个使用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)

共有1个答案

岳池暝
2023-03-14

没有指定。我相信实现的工作方式是丢失了一半的数据,但无论如何,没有写出任何其他内容,所以您只需要假设最坏的情况。

然而,在实践中,这是很不可能发生的,前提是你遵守发送方的常识。

 类似资料:
  • 好吧,好吧,但是当我的插座不阻塞时会发生什么??我搜索了一点(可能不够,谁知道呢?)并且不知道如何判断对方何时使用非阻塞套接字关闭了连接。似乎没有任何方法或属性告诉我们这一点,并且将的返回值与空字符串进行比较似乎绝对没有用……只是我有这个问题吗? 作为一个简单的示例,假设我的套接字的超时设置为1.2342342秒(无论您在这里喜欢什么非负数),并且我调用,但是另一方在1.2342342秒期间没有发

  • 我正在学习套接字编程,服务器套接字让我感到困惑。我为服务器套接字写了两个场景,请看一下: null 如果我的一个假设是正确的,那会回答下面的问题吗?或者,我的两种设想都是错误的。如果你能指导我找到正确的答案,或者至少是一些相关的文本来学习,我将非常感谢。

  • 我对ServerSocket客户端有疑问:Android服务器:我的pc带有静态IP我正在使用客户端的一个套接字连接到服务器,服务器接受套接字并获取其输入和输出流。问题是,当服务器将数据写入输出流时,我无法理解客户端如何接收消息(我知道如何)。如果服务器向客户端发送数据,考虑到客户端(android)没有可以通过互联网访问的ip,怎么可能呢。我知道长轮询,这里也使用这种方法吗?

  • 问题内容: 假设我有一个查询发送到我的SQL-Server数据库,它花费了30秒钟以上,并且我的程序引发了SQL Query Timeout异常。查询是否仍然在我的数据库中徘徊,或者在引发异常后立即终止? 问题答案: 客户端使用注意事件向服务器发出查询超时信号。注意事件只是SQL Server客户端可以发送给它的TDS数据包的一种不同类型。除了连接/断开连接,T-SQL批处理和RPC事件外,客户端

  • 有一个列表正在被两个线程同时排序和迭代。不出所料,它导致。不清楚的是错误的时间。 输出:(出现几次) 为什么当第一个线程完成时,另一个线程的迭代失败? 当两个线程分别完成排序并获得迭代器时,底层迭代器将不会改变。为什么在此阶段会导致异常?

  • 假设通过网络在两个套接字之间建立tcp连接。一个是服务器端,另一个是客户端。 谢谢