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

在TCP中,inputstream为什么不能在outputstream关闭之前累加消息[重复]

从智明
2023-03-14

我在客户机中使用这样的代码

    DataOutputStream out = new DataOutputStream(client.getOutputStream());
    out.writeUTF(mssage);
    out.flush();

    while(true){

    }

在我的服务器中使用此代码

DataInputStream in=new DataInputStream(c1.getInputstream());system.out.println(in.readutf());

    OutputStream out=client.getOutputStream();

    out.write(mssage.getBytes());


    out.flush();

    while(true){

    }
    InputStream in= c1.getInputStream();
        byte [] b=new byte [32];

        while((in.read(b))!=-1){

            toprint+=new String (b);

        }
        System.out.print(toprint);

在我关闭客户端或关闭输出流之前,服务器无法接收消息,并且将出现连接重置错误。什么原因?

共有1个答案

柯书
2023-03-14

您的服务器正在读取其输入流,直到流结束,然后才打印任何内容,在对等端关闭套接字或关闭其输出之前,套接字上的流结束不会发生。

另一个问题是读取循环不正确,因为它忽略了读取计数。

试试这个:

int count;
while ((count = in.read(b)) != -1){

    toprint+=new String (b, 0, count);
    System.out.write(b, 0, count);
}
 类似资料:
  • 我认为1534236469超出范围!Leetcode:7。反向整数我无法通过测试输入1534236469。为什么?返回范围为[Integer.MAX_VALUE,Integer.MIN_VALUE],其他应返回零 谢谢你的帮助

  • 问题内容: 出于好奇,为什么< img >标签没有在 HTML中 关闭? 我还注意到,< img >标记在 XHTML中 已显式关闭。 问题答案: 从历史上看,HTML一直基于SGML,它允许在某些情况下省略标签。 由于元素不能有任何子节点,因此将其定义为EMPTY,并且禁止使用end标签(因为它将毫无用处)。 XHTML是用XML表示的HTML,并且XML不支持可选或禁止的标签(尽管它允许使用自

  • 问题内容: 通常,当我打开文件时,我从不调用该方法,也不会发生任何不良情况。但是有人告诉我这是不好的做法。这是为什么? 问题答案: 在大多数情况下,不关闭文件是一个坏主意,原因如下: 它会将您的程序放在垃圾收集器的手中-尽管 理论上 该文件将自动关闭,但可能不会关闭。Python 3和Cpython通常在垃圾收集方面做得相当不错,但并非总是如此,其他变体通常也很烂。 它可能会降低您的程序速度。打开

  • 问题内容: 我正处于开发阶段,在那里我有两个模块,从一个模块我得到的输出为a OutputStream,第二个模块仅接受InputStream。您是否知道如何转换OutputStream为InputStream可以连接这两部分的方式(反之亦然,我是说真的) 谢谢 问题答案: 是您向其中写入数据的地方。如果某个模块公开了,则期望在另一端读取一些内容。 另一方面,暴露出的信息表示您需要侦听此流,并且会

  • 我正在使用apacheMQ作为队列管理器。我使用Spring的DefaultMessageListenerContainer来使用消息。我已经对它进行了配置,以便它有一个事务: