写入Socket outputStream没有关闭它

我想给服务器写一些消息。 每次,仅对于tramsmitting,我正在关闭outputStream并在我必须发送下一条消息时重新打开它。

os.write(msgBytes); os.write("\r\n".getBytes()); os.flush(); os.close(); 

我如何保持这个Socket的OutputStream,os,打开并仍然能够发送消息?

谢谢。

我在这里遗漏了一些东西。 如果你不打电话,它将不会关闭。 例如,

 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(); 

在大多数协议中,服务器接受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可能会导致某些原始数据类型出现问题。

SocketOutputStream包装在PrintWriter并调用PrintWriterprintln方法。

 PrintWriter pw = new PrintWriter(socket.getOutputStream()); .... pw.println(message); // call repeatedly to send messages. .... pw.close(); // when finished writing to server and want to close conn. 

我发现了问题,它在客户端。 在客户端,我使用过 –

 count = inputStream.read(buffer)) > -1 

这意味着,客户端等待服务器的outputStream关闭,然后处理传入的数据。