我想给服务器写一些消息。 每次,仅对于tramsmitting,我正在关闭outputStream并在我必须发送下一条消息时重新打开它。
os.write(msgBytes);
os.write("\r\n".getBytes());
os.flush();
os.close();
如何保持此Socket的OutputStream,os,打开并仍然能够发送消息?
感谢。
答案 0 :(得分:3)
我在这里遗漏了一些东西。如果你不打电话,它将不会关闭。例如,
os.write(msgBytes);
os.write("\r\n".getBytes());
os.flush();
// Do something
os.write("more message");
os.flush();
// When you are finally done
os.close();
答案 1 :(得分:2)
在大多数协议中,服务器接受som类型的EOF符号。发送这样的符号而不是关闭流。
例如,IRC服务器将“\ r \ n”解释为消息的结尾。这将是一个打开的OutputStream上的2条消息:
PrintStream printStream = new PrintStream(socket.getOutputStream());
printStream.print("JOIN #channel1\r\n");
printStream.flush( );
printStream.print("JOIN #channel2\r\n");
printStream.flush( );
此外,您应该使用DataOutputStream包装outputStream。这个包装器创建了更多便携式输出。如果服务器和客户端具有不同的计算机体系结构,则Plain OutputStream可能会导致某些原始数据类型出现问题。
答案 2 :(得分:1)
将Socket
的{{1}}换成OutputStream
并调用PrintWriter
的{{1}}方法。
PrintWriter
答案 3 :(得分:1)
我发现了问题,它在客户端。 在客户端,我使用了 -
count = inputStream.read(buffer)) > -1
这意味着,客户端等待服务器的outputStream关闭,然后处理传入的数据。