public string Receive() { try { // Initialize the receive state. InitializeAsyncReceive(); // Begin receiving the data from the remote device. BeginReceive(); // Wait for the final callback signal. Logger.WriteEntry("ReceiveDoneEvent.WaitOne() will wait for signal."); ReceiveDoneEvent.WaitOne(); } catch (Exception e) { Logger.WriteEntry(e.ToString()); } return(this.ReceivedText); }
private void ReceiveCallback(IAsyncResult asyncResult) { try { // Retrieve the state object and the clientSocket socket from the asynchronous state object. CallbackReceiveState callbackReceiveState = ( CallbackReceiveState )asyncResult.AsyncState; // Read data from the remote device. int bytesRead = ConnectedSocket.EndReceive(asyncResult); if (bytesRead > 0) { Logger.WriteEntry("ReceiveCallBack() Received " + bytesRead.ToString()); // Accumulate the received text. string receivedText = Encoding.ASCII.GetString(callbackReceiveState.ReceiveBuffer, 0, bytesRead); callbackReceiveState.Sb.Append(receivedText); // Recursively get the rest of the data. BeginReceive(); } else { Logger.WriteEntry("ReceiveCallBack() Received 0 bytes. Should be done. "); // All the text has arrived. if (callbackReceiveState.Sb.Length > 1) { this.ReceivedText = callbackReceiveState.Sb.ToString(); } Logger.WriteEntry("ReceiveDoneEvent.Set() to signal completion."); // Signal the completion of the message. ReceiveDoneEvent.Set(); } } catch (Exception e) { Logger.WriteEntry(e.ToString()); } }
protected void InitializeAsyncReceive() { ReceivedText = ""; ReceiveDoneEvent.Reset(); ReceiveState = new CallbackReceiveState(); }
protected async Task ReceiveAsync() { NetworkStream netstream = client.GetStream(); int receivedNum; try { receivedNum = await netstream.ReadAsync(buffer, 0, packager.Length + sizeof(int)); } catch (SocketException se) { ReceivingAsyncStopEvent?.Invoke(this); throw se; } if (receivedNum == 0) { //Lost connection LostConnectionEvent?.Invoke(this); ReceivingAsyncStopEvent?.Invoke(this); receiving = false; return; } if (receivedNum < packager.Length + sizeof(int)) { ReceiveHeaderFailEvent?.Invoke(this); ReceivingAsyncStopEvent?.Invoke(this); receiving = false; return; } byte[] tem = new byte[packager.Length + sizeof(int)]; Array.Copy(buffer, 0, tem, 0, packager.Length + sizeof(int)); if (!packager.Check(tem)) { ReceiveHeaderFailEvent?.Invoke(this); receiving = false; return; } byte[] len = new byte[4]; Array.Copy(tem, packager.Length, len, 0, sizeof(int)); int length = ByteConverter.Byte2Int(len); remainReceiveLength = length; int readsize = remainReceiveLength < bufferSize ? remainReceiveLength : bufferSize; while (remainReceiveLength > 0) { try { receivedNum = await netstream.ReadAsync(buffer, 0, readsize); } catch (SocketException se) { ReceivingAsyncStopEvent?.Invoke(this); receiving = false; throw se; } if (receivedNum == 0) { //Lost connection LostConnectionEvent?.Invoke(this); ReceivingAsyncStopEvent?.Invoke(this); receiving = false; return; } remainReceiveLength -= receivedNum; tem = new byte[receivedNum]; Array.Copy(buffer, tem, receivedNum); if (receivedData == null) { receivedData = new byte[receivedNum]; Array.Copy(tem, 0, receivedData, 0, receivedNum); } else { receivedData = receivedData.Concat(tem).ToArray(); } readsize = remainReceiveLength < bufferSize ? remainReceiveLength : bufferSize; } ReceiveObjectDoneEvent?.Invoke(this, packager.UnPack(receivedData)); ReceiveDoneEvent?.Invoke(this, receivedData); receivedData = null; }