2012-12-26 31 views
1

我有類似的問題,可能像here一樣。Unity3d c#TCP客戶端代碼不能連續接收第二條消息

從服務器(Java的TCP服務器)IM這樣做:

public void sendMsg(String msg) { 

    out.println(msg); // msg is: "MSG Hello" without quetes 

    out.flush(); 

} 

當我推兩次或更多次我收到客戶端代碼中只有第一條消息是unity3d代碼C#插座

void Update() { 

    if(connected) { 

     try { 

      if(theStream.DataAvailable) { 

       String data = sr.ReadLine(); 
// bla bla 

回答

1

擺脫if(theStream.DataAvailable)。您無法檢查數據是否可用,因爲如果您已收到數據,則無法使用。雖然ReadLine函數僅向您返回一行,但它可能讀取的行數多於一行。

所以這裏發生了什麼:

  1. 所有數據發送。

  2. 有數據可用,請致電ReadLine。它讀取所有數據並將一行返回給您。

  3. 現在沒有數據可用,因爲它已經從連接中讀取。

該檢查還存在其他問題。如果嘗試避免在線路不可用時撥打ReadLine,則不會這樣做。有些數據可用並不意味着整條線是。 (想象一下,如果另一端惡意發送一個單一的X字節。)

+0

我該如何檢查是否有數據並收到完整消息時?也連續多個消息? –

+0

只需調用'ReadLine'。 –

+0

我只是刪除檢查「if(theStream.DataAvailable){}」但當我運行統一客戶端的應用程序frezee,直到我殺死服務器...我試圖「String data = sr.ReadLine();打印(數據);」在update()方法 –

相關問題