已解決:能夠比我想象的更早進行測試。原來我的服務器端代碼是正確的,而且我並沒有經常檢查客戶端變量的變化。現在完美運作。努力讓客戶端自動接收服務器的更新
我正在使用服務器與客戶端進行通信的端項目。每當java服務器向android客戶端發送更新時,它都會在第一次運行時運行。之後,客戶端不會註冊服務器的消息,因爲在第一次運行時,我已經關閉了套接字,所以我嘗試了不同的方法。
我試圖只通過flush()
的數據通過,只有當我完成讀取數據時關閉它,但即使如此,flush()
不工作,除非我真的。我的最終目標是通過服務器發送數據,並在發送完成後立即在客戶端顯示該數據。我只是困惑於我如何不斷關閉套接字或流(如果重要,我使用OutputStreamWriter),從服務器向客戶端連續發送數據。
編輯:我忘了提及,但我確實意識到flush()確實將數據發送到客戶端,它只是不更新客戶端UI上的數據,直到關閉流爲止。我試圖讓它自動更新
我現在不能發佈我的代碼,因爲我幾個小時都無法訪問它。我試過的一些事情是setTcpNoDelay爲true,並通過字節流發送&,但這不起作用。下面是一些僞代碼,可以讓您瞭解客戶端和服務器的外觀。
服務器:
Open the server socket and make the client socket accept the server socket
While the user doesnt quit...
Enter a value to send to the client and
try
sendData(). After that,
close the outputstreamwriter
sendData(String data) -
Declare an outputstreamwriter(Calling it out)
out.write(data)
out.flush()
客戶:
BufferedReader takes an InputStreamReader parameter and gets the socket's inputStream
While the bufferedReader hasNext
String message = bufferedReader's input then
Display the data
bufferedReader.close()
編輯:從做一些研究,並在數據未立即使用,因爲它是被緩衝送?如果這是對的,有沒有辦法加快這個過程?(對不起,如果這聽起來很蠢)