2017-01-19 94 views
0

所以我在這裏遇到了這個問題,我使用openfl.net.Socket與我的服務器連接並從它接收消息。 問題是服務器幾乎在同一時間發送兩條消息,我的套接字看起來只能讀取一條,我試着在第二條消息上放置一個斷點並在它停止後釋放它(如0.5秒的睡眠),以及所以我的客戶收到這兩個消息,但幾乎在同一時間發送我只有一個......提示?套接字不接收來自服務器的兩個消息(幾乎同時)

socket.addEventListener(ProgressEvent.SOCKET_DATA, onResponse); 
function onResponse(e:ProgressEvent):Void 
    { 
     trace("response"); 
     if (socket.bytesAvailable > 0) 
     { 
      var size:Int = socket.readInt(); 
      var domainId:Int = socket.readInt(); 
      var messageId:Int = socket.readInt(); 
      var count:Int = socket.readInt(); 

      var socketData:String = socket.readUTFBytes(socket.bytesAvailable); 
      trace("RECEIVE: " + socketData); 

      var message:Message = Message.JSONToMessage(socketData); 
      Domain.processMessage(message); 
     } 
    } 

我希望我自己清楚

+1

當您只收到一條消息時,尺寸是多少?這是發送的兩條消息的總和嗎? – Prabhu

+0

Yessss是!好一個!!我如何解決它? –

回答

1

因此,在接收端,在一個recv你正在從另一端發送的所有數據。

你應該瞭解TCP的一件事是它不保留消息邊界。它實際上並不知道「信息」是什麼。它是一個字節流協議。在這裏的三個send可能導致在另一端的三個recv或另一端的一個recv全部交換數據。

使用TCP的應用程序應該構造出TCP傳遞給它們的「消息」。 TCP只是確保數據按發送順序發送,並盡力發送發送給接收方的數據包。由應用程序協議決定應該如何處理數據。

相關問題