2010-05-13 53 views
4

我想寫一些消息到服務器。 每一次,只有傳輸,我關閉outputStream,並重新打開時,我必須發送下一條消息。寫入Socket的outputStream w/o關閉它

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

如何保持此Socket的OutputStream,os,open,仍然能夠發送消息?

謝謝。

回答

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

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. 
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可能會導致某些原始數據類型出現問題。

1

我發現了問題,它放在客戶端。 在客戶端,我用 -

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

這意味着,客戶端等待,直到服務器的OutputStream的關閉,然後處理傳入的數據。

相關問題