2010-06-18 2 views
0

Я использую Silverlight для взаимодействия с прокси-приложением, которое я разработал, но без прокси-сервера, отправляющего сообщение в приложение Silverlight, он выполняет обработчик получателя с пустым буфером ('\ 0 '). Есть ли что-то, что я делаю неправильно? Это вызывает ошибку памяти .Silverlight Socket постоянно возвращается с пустым буфером

this._rawBuffer = new Byte[this.BUFFER_SIZE]; 
SocketAsyncEventArgs receiveArgs = new SocketAsyncEventArgs(); 
receiveArgs.SetBuffer(_rawBuffer, 0, _rawBuffer.Length); 
receiveArgs.Completed += new EventHandler<SocketAsyncEventArgs>(ReceiveComplete); 
this._client.ReceiveAsync(receiveArgs); 

if (args.SocketError == SocketError.Success && args.LastOperation == SocketAsyncOperation.Receive) 
{ 
    // Read the current bytes from the stream buffer 
    int bytesRecieved = this._client.ReceiveBufferSize; 
    // If there are bytes to process else the connection is lost 
    if (bytesRecieved > 0) 
    { 
     try 
     { 
      //Find out what we just received 
      string messagePart = UTF8Encoding.UTF8.GetString(_rawBuffer, 0, _rawBuffer.GetLength(0)); 
      //Take out any trailing empty characters from the message 
      messagePart = messagePart.Replace('\0'.ToString(), ""); 
      //Concatenate our current message with any leftovers from previous receipts 
      string fullMessage = _theRest + messagePart; 
      int seperator; 

      //While the index of the seperator (LINE_END defined & initiated as private member) 
      while ((seperator = fullMessage.IndexOf((char)Messages.MessageSeperator.Terminator)) > 0) 
      { 
       //Pull out the first message available (up to the seperator index 
       string message = fullMessage.Substring(0, seperator); 
       //Queue up our new message 
       _messageQueue.Enqueue(message); 
       //Take out our line end character 
       fullMessage = fullMessage.Remove(0, seperator + 1); 
      } 

      //Save whatever was NOT a full message to the private variable used to store the rest 
      _theRest = fullMessage; 

      //Empty the queue of messages if there are any 
      while (this._messageQueue.Count > 0) 
      { 
       ... 
      } 
     } 
     catch (Exception e) 
     { 
      throw e; 
     } 
     // Wait for a new message 

     if (this._isClosing != true) 
      Receive(); 
    } 

} 

Спасибо заранее.

ответ

1

Я предполагаю, что второй блок кода является вашим ReceiveComplete обработчиком. Если это так, вы должны посмотреть свойство SocketAsyncEventArgs.BytesTransferred, чтобы получить счетчик полученных байтов.

+0

спасибо !! Простые ошибки в их лучших! – Benny

Смежные вопросы