Beispiel #1
0
        /// <summary>
        /// Called when data is recieved
        /// </summary>
        /// <param name="iar"></param>
        void OnCompleteReadFromTCPClientStreamCallback(IAsyncResult iar)
        {
            TcpClient tcpc;
            int       countReadBytes = 0;
            string    strRecv;

            tcpc = (TcpClient)iar.AsyncState;
            try
            {
                countReadBytes = tcpc.GetStream().EndRead(iar);
                if (countReadBytes == 0)
                {
                    outFile.WriteLine("Client disconnected");
                    outFile.Flush();
                    Debug.WriteLine("Client disconnected");
                    ReceivedDataEvent.Set();
                    return;
                }

                strRecv = Encoding.ASCII.GetString(rx, 0, rx.Length);
                str     = strRecv + Environment.NewLine;
                ReceivedDataEvent.Set();
                rx = new byte[1];
                tcpc.GetStream().BeginRead(rx, 0, rx.Length, OnCompleteReadFromTCPClientStreamCallback, tcpc);
            }
            catch (Exception exc)
            {
                outFile.WriteLine(exc.Message);
                outFile.Flush();
                // för att loopen inte ska brytas.
                rx = new byte[1];
                tcpc.GetStream().BeginRead(rx, 0, rx.Length, OnCompleteReadFromTCPClientStreamCallback, tcpc);
            }
        }
        /// <summary>
        /// 数据处理定时器
        /// 定时检查缓冲区是否有数据,如果有数据则将数据处理并广播。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SPRecvTimer_Tick(object sender, EventArgs e)
        {
            byte[] TemporaryData       = new byte[byteLength];
            int    TemporaryDataLength = 0;

            if (ReceivedDataEvent != null)
            {
                byteSerialPortRecv.CopyTo(TemporaryData, 0);
                TemporaryDataLength = pSerialPortRecv;

                ReceivedDataEvent.Invoke(this, new SerialPortRecvEventArgs(TemporaryData, TemporaryDataLength));
                // 数据处理完后,将指针指向数据头,等待接收新的数据
                pSerialPortRecv = 0;
            }
        }
Beispiel #3
0
    private void ReceiveCallback(IAsyncResult ar)
    {
        var state = ar.AsyncState as SocketState;

        try
        {
            if (state != null)
            {
                int receiveLen = state.Self.EndReceiveFrom(ar, ref state.RemotePoint);
                if (receiveLen > 0)
                {
                    byte[] receivedData = new byte[receiveLen];
                    Array.Copy(state.Buffer, 0, receivedData, 0, receiveLen);
                    state.Buffer = receivedData;

                    //string str = System.Text.Encoding.UTF8.GetString(receivedData);
                    //Debug.Log(str);
                    //SqlHelper.Insatance.GetSqlConn();

                    Debug.Log($"接收数据长度:{receivedData.Length}");

                    Debug.Log(BitConverter.ToString(receivedData));
                    GPSInfosManager.Insatance.praseMessage(receivedData);

                    state.ReceivedTime = DateTime.Now;
                    ReceivedDataEvent?.Invoke(state);
                }
            }
        }
        catch (Exception error)
        {
            ErrorEvent?.Invoke(error.Message, state?.RemotePoint);
        }
        finally
        {
            if (state != null)
            {
                BeginReceive();
            }
        }
    }
Beispiel #4
0
 protected virtual void OnRaiseReceivedData(string ip, byte[] data)
 {
     ReceivedDataEvent?.Invoke(this, new SocketEventArgs(ip, data));
 }
Beispiel #5
0
 public void ReceivedData(string status)
 {
     ReceivedDataEvent?.Invoke(status);
 }