2013-04-17 69 views
0

我創建了自己的java套接字服務器,該套接字服務器不會執行websocket只是普通的舊套接字。我把每個消息都包含在0x00和0xFF之內。所以每條消息都以0x00開始並以0xFF結束。由於某些原因,當我在短時間內從閃存中讀取消息大小超過3000字節時,我收到的消息或消息缺少字符或不完整的消息。這是我在閃光燈中所擁有的。任何指針都將不勝感激。用於java套接字服務器的Flex客戶機

private function onData(event:ProgressEvent):void 
     { 
      var obj:String; 

      while(_serviceSocket.bytesAvailable > 0) 
      { 
       if(_serviceSocket.readByte() == START_FRAME || _currentBuffer == null) 
       { 
        _currentBuffer = new ByteArray(); 
       } 
       var byte:int; 
       while(true) 
       {   
        try 
        { 
         byte = _serviceSocket.readByte(); 
         if(byte == END_FRAME){ 
          obj = _currentBuffer.toString(); 
          processMessage(obj); 
          _currentBuffer = null; 
          break; 
         }else{ 
          _currentBuffer.writeByte(byte);        
         } 
        }catch(e:Error){ 
         obj = _currentBuffer.toString(); 
         processMessage(obj); 
         _currentBuffer = null; 
         break; 
        }      
       } 
      } 
     } 
+0

可以粘貼錯誤? – NINCOMPOOP

+0

沒有錯誤,但是當我查看收到的字節時,它們不是按順序排列的,導致消息丟失字符或部分。這隻發生在生產環境中,我不能在我的盒子中複製。 – user2289259

回答

0

請嘗試以下代碼,並檢查輸出

function onData(event:ProgressEvent):void{ 

    var data:String = ""; 

    var stream:ByteArray = new ByteArray(); 
    socket.writeBytes(stream, 0, 0); 

    while(socket.bytesAvailable){ 
     data += socket.readUTFBytes(1); 
    } 

    trace("data "+ data); 

} 
+0

感謝您的回覆。我希望我可以在我的盒子中複製這個,我一直在運行服務器,並在幾個小時的時間內請求重新啓動服務器,但我一直無法重新創建它。我注意到你的readUTFBytes,讓我們看看是否有幫助。 – user2289259

+0

爲什麼你發送一個空的'ByteArray'到套接字?你能解釋一下嗎? – SSpoke

相關問題