2017-01-19 2 views
0

J'ai donc eu ce problème ici, j'utilise un openfl.net.Socket pour me connecter à mon serveur et recevoir des messages de celui-ci. Le problème est que le serveur envoie deux messages presque en même temps et mon socket semble en lire un seul, j'ai essayé de mettre un breakpoint sur le second message et de le relâcher juste après qu'il s'arrête (comme un sleep de 0.5 secondes), alors mon client reçoit les deux messages, mais en envoyant les deux à peu près au même moment je n'en reçois qu'un ... Des trucs?Socket ne pas recevoir les deux messages du serveur (presque en même temps)

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); 
     } 
    } 

J'espère que je me suis fait clair

+1

Lorsque vous recevez un seul message, quelle est la taille? Est-ce la somme des deux messages qui ont été envoyés? – Prabhu

+0

Yessss c'est !! Joli!! Comment puis-je le résoudre? –

Répondre

1

Ainsi, du côté de la réception, dans un recv vous obtenez toutes les données envoyées à l'autre extrémité.

Une chose que vous devez savoir à propos de TCP est qu'il ne gère pas les limites des messages. En fait, il ne sait pas ce qu'est un "message". C'est un protocole de flux d'octets. Trois send s ici peut entraîner trois recv à l'autre extrémité ou même un recv à l'autre extrémité pour l'échange complet de données.

Les applications utilisant TCP doivent construire des "messages" à partir de ce que le TCP leur transfère. TCP s'assure simplement que les données sont données dans l'ordre où elles ont été envoyées, et fait de son mieux pour livrer les paquets envoyés au récepteur. C'est au protocole d'application de définir ce qui doit être fait avec les données.