我试图从客户端向服务器发送字符串,但它似乎并不是从输入流中读取。
客户端
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();
}服务器
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) {}
}如果我从客户端的输出流关闭流,它会读取,但我试图从客户机向服务器发送多条消息。有人能帮忙吗?
发布于 2014-06-21 11:56:45
您似乎认为,每次在客户端调用刷新()时,服务器都会知道,并且能够知道这是消息的结束。事实并非如此。IOUtils.copy()从字节流中读取所有内容。虽然还没有到达流结束,但copy()不会返回。
你可以看到溪流作为一个长管的两面。如果你把10桶水倒在管子的末端,你在另一边会得到的只有持续的水流。
如果您需要多个单独的消息,那么您需要设计一个允许分离消息的协议,并读取到消息的末尾。例如,它可以基于分离器。或者您可以发送消息的长度和消息本身,让服务器知道它必须读取多少字节才能得到下一条消息。
https://stackoverflow.com/questions/24341295
复制相似问题