Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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());
            }
        }
Exemplo n.º 3
0
 protected void InitializeAsyncReceive()
 {
     ReceivedText = "";
     ReceiveDoneEvent.Reset();
     ReceiveState = new CallbackReceiveState();
 }
Exemplo n.º 4
0
        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;
        }