2010-02-05 74 views
3

我用Java編寫基於套接字服務器。客戶端連接到它(網絡瀏覽器),服務器發回一個簡單的html代碼,並設置cookie以在客戶端再次連接到它時識別。我正在使用PrintStream寫入套接字,但刷新不起作用。我可以刷新的唯一方法是使用shutdownoutput或close並關閉套接字流。但我不希望這樣,因爲我在代碼中的幾個地方多次讀入/寫入。有什麼可以做的?無法從標籤中獲得任何幫助。 我也試過其他緩衝作家類,同樣的問題。Java Socket技術的OutputStream不沖水

+0

你能發佈一個你的服務器代碼的例子嗎? – Kylar 2010-02-14 04:33:54

+2

這真的很古老,但對於後代來說,'ps.flush()'是不必要的,因爲當打印''\ n「'時發生刷新 - 即調用'println()'。此外,在'SocketOutputStream'中,'flush()'方法無論如何都是無操作的。 – Gray 2011-11-25 14:04:43

回答

0

我會嘗試調用此方法,而不是平的:

public boolean checkError() 
Returns: 
    True if and only if this stream has encountered an IOException other than InterruptedIOException, or the setError method has been invoked 

看看是不是沒有出於某種原因做沖洗(checkError調用內部沖洗並記住錯誤狀態)。

也值得嘗試使用telnet和看如果數據被立即返回,或者寫一個簡單的java客戶端套接字程序檢查(剪切/粘貼一個斷網)連接到服務器。

這可能是瀏覽器的決定顯示你的HTML(特別是如果沒有完全形成HTML)之前,故意等待更多的輸入。我似乎記得過去自己也有過這個問題。

4

啊是啊,sillyproblem,你只需要使用pstream.writeln( 「」);因爲breader.readLine()讀取直到找到'\ n'字符。 所以write()將不起作用。