我想寫一些消息到服務器。 每一次,只有傳輸,我關閉outputStream,並重新打開時,我必須發送下一條消息。寫入Socket的outputStream w/o關閉它
os.write(msgBytes);
os.write("\r\n".getBytes());
os.flush();
os.close();
如何保持此Socket的OutputStream,os,open,仍然能夠發送消息?
謝謝。
我想寫一些消息到服務器。 每一次,只有傳輸,我關閉outputStream,並重新打開時,我必須發送下一條消息。寫入Socket的outputStream w/o關閉它
os.write(msgBytes);
os.write("\r\n".getBytes());
os.flush();
os.close();
如何保持此Socket的OutputStream,os,open,仍然能夠發送消息?
謝謝。
我很想念這裏的東西。如果你不打電話,它將不會關閉。例如,
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();
將Socket
的OutputStream
包括在PrintWriter
中,並調用PrintWriter
的println
方法。
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.
在大多數協議中,服務器接受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可能會導致某些原始數據類型出現問題。
我發現了問題,它放在客戶端。 在客戶端,我用 -
count = inputStream.read(buffer)) > -1
這意味着,客戶端等待,直到服務器的OutputStream的關閉,然後處理傳入的數據。