首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IOUtils复制和写入问题

IOUtils复制和写入问题
EN

Stack Overflow用户
提问于 2014-06-21 11:49:45
回答 1查看 1.3K关注 0票数 1

我试图从客户端向服务器发送字符串,但它似乎并不是从输入流中读取。

客户端

代码语言:javascript
复制
Scanner scanner = new Scanner(System.in);
Socket connection = new Socket("localhost", 13)
OutputStream out = connection.getOutputStream();

while(true) {
    String message = scanner.nextLine();
    IOUtils.write(message, out, "UTF-8");
    out.flush();
}

服务器

代码语言:javascript
复制
ServerSocket server = new ServerSocket(localhost,13);~
Socket connection = server.accept();
InputStream in = connection.getInputStream();
StringWriter writer = new StringWriter();

while(true) {
    try {
        IOUtils.copy(in, writer);
        System.out.println(writer.toString());
    } catch(IOException io) {}
}

如果我从客户端的输出流关闭流,它会读取,但我试图从客户机向服务器发送多条消息。有人能帮忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-21 11:56:45

您似乎认为,每次在客户端调用刷新()时,服务器都会知道,并且能够知道这是消息的结束。事实并非如此。IOUtils.copy()从字节流中读取所有内容。虽然还没有到达流结束,但copy()不会返回。

你可以看到溪流作为一个长管的两面。如果你把10桶水倒在管子的末端,你在另一边会得到的只有持续的水流。

如果您需要多个单独的消息,那么您需要设计一个允许分离消息的协议,并读取到消息的末尾。例如,它可以基于分离器。或者您可以发送消息的长度和消息本身,让服务器知道它必须读取多少字节才能得到下一条消息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24341295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档