Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从套接字丢弃输入_Java_Sockets_Inputstream - Fatal编程技术网

Java 从套接字丢弃输入

Java 从套接字丢弃输入,java,sockets,inputstream,Java,Sockets,Inputstream,从Socket文档: 关机输入 public void shutdownInput() throws IOException 将此套接字的输入流置于“流的末尾”。发送到套接字的输入流端的任何数据都会被确认,然后被悄悄地丢弃 如果在调用套接字上的shutdownInput()后从套接字输入流读取,则该流将返回EOF 为了测试服务器中客户端之间的交互,我编写了一些客户端机器人程序。 这些机器人程序生成一些随机的客户端请求。由于它们只向服务器写入数据,因此不需要

Socket
文档:

关机输入

public void shutdownInput()
                   throws IOException
将此套接字的输入流置于“流的末尾”。发送到套接字的输入流端的任何数据都会被确认,然后被悄悄地丢弃

如果在调用套接字上的shutdownInput()后从套接字输入流读取,则该流将返回EOF

为了测试服务器中客户端之间的交互,我编写了一些客户端机器人程序。 这些机器人程序生成一些随机的客户端请求。由于它们只向服务器写入数据,因此不需要输入流,也不需要读取服务器发送的更新。这是机器人程序的主要代码:

private void runWriteBot(PrintWriter out) throws IOException {
    //socket.shutdownInput();
    String request;
    System.out.println("Write bot ready.");
    while (!quit) {
        request = randomRequest();
        out.println(request);
        sleep();
    }
}
如果我取消注释
关闭输入
,服务器的客户端处理程序中将抛出异常:

连接重置

我不希望在套接字的另一端抛出异常。文档表明(至少对我来说)对方发送的任何东西都将被默默地丢弃,不会对另一端的活动造成干扰(即不会让对方抛出异常)

  • 我是否可以忽略服务器发送的内容,或者是否应该排出输入流中的内容

  • 是否有任何automagic方法可以做到这一点,或者我需要定期阅读并忽略它


  • 调用
    shutdownInput()
    时的行为取决于平台

  • BSD Unix将以静默方式放弃任何进一步的输入
  • Linux将继续缓冲输入,这将最终阻止发送方,或者如果发送方处于非阻塞模式,将导致他获得EAGAIN/ewoldblock
  • 如果有更多数据到达,Windows将重置连接
  • 这取决于平台,而不是Java

    在大多数情况下,我认为没有必要调用
    shutdownInput()
    。它唯一真正有用的是解除对读取的阻止。在您的情况下,您必须阅读服务器响应