2013-11-09 61 views
0

發送多個字符串我試圖通過插座beetween在客戶端和服務器建立通信。情況如下:在服務器上有一個溫度控制器,我想每2秒發送一次,例如溫度值給客戶端。好了,我要的是隻使用一個插座在循環發送多個字符串......總而言之什麼,我會像在服務器的Socket通信的Java:在一個循環中

Socket s=new Socket (IPAddress,serverport); 
InputStreamReader isr = new InputStreamReader(s.getInputStream()); 
in = new BufferedReader(isr); 
while (continue) { 
    String temperature=in.readLine(); 
    //code for processing incoming information 
    } in.close(); s.close(); 

同樣的事情。現在,如果我沒有關閉輸入流,我什麼也沒得到,但是如果我關閉它,套接字自動關閉,程序會拋出「Closed socked」異常。
任何人都可以給我任何建議嗎?

+2

試圖在服務器端的流上使用flush()? – Dejan

回答

-1

我用DataOutputStream類/ DataInputStream類成功。它可以讓你傳輸基本的Java結構。

在客戶端,如果你的體溫是一個浮動,你可以使用writeFloat方法,而使用DataInputStream類服務器將使用

float foo = in.readFloat(); 

這個調用塊,直到有要讀取的浮動,或拋出一個異常如果客戶端關閉套接字。您可以使用while true循環來處理值。

不過,我會被終止連接做到這一點。它只是在我看來更整潔,更「插座」。每2秒鐘你的溫度傳感器就會打開一個新的連接,發送數值並關閉插座。您的服務器會在serversocket.accept()中等待,然後從客戶端套接字讀取一個浮點數。

Hannu

+0

我不同意它更「封閉」來關閉連接。如果數據交換將繼續,關閉連接就沒用了。特別是考慮到數據每2秒發送一次。如果時間較長,這可能是一個可行的選擇。當數據交換在某個點停止時,連接應該最終關閉。 – Kayaman

+0

@Kayaman - 是的。如果路徑延遲導致打開/關閉3/4路握手時間超過2秒,則2秒交換間隔的打開/關閉協議將成爲問題。絕望無望。 –