/// <summary>
 /// 接收数据回调函数
 /// </summary>
 /// <param name="ar"></param>
 private void ReceiveCallback(IAsyncResult ar)
 {
     try
     {
         SocketError     error;
         UserTokenObject userToken = (UserTokenObject)ar.AsyncState;
         int             bytesRead = _serverSocket.EndReceive(ar, out error);
         if (bytesRead > 0 && error == SocketError.Success)
         {
             Interlocked.Add(ref _receivedBytesCount, bytesRead);
             DataReceivedEventArgs e = new DataReceivedEventArgs();
             e.UserToken    = userToken;
             e.RealDataSize = bytesRead;
             e.Data         = new byte[bytesRead];
             Array.Copy(userToken.Buffer, 0, e.Data, 0, bytesRead);
             DataReceived(this, e);
             Receive(userToken);
         }
         else
         {
             CloseSocket();
             Console.WriteLine("ReceiveCallback: " + error.ToString());
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex);
     }
 }
Beispiel #2
0
        public TcpConnection(Socket socket)
        {
            _isConnected = true;
            _client      = socket;
            AssociatedID = _client.RemoteEndPoint.ToString().GetHashCode();
            UserTokenObject userToken = new UserTokenObject();

            userToken.AssociatedID = _client.RemoteEndPoint.ToString();
            userToken.WorkSocket   = _client;
            Receive(userToken);
        }
 /// <summary>
 /// 接收数据
 /// </summary>
 /// <remarks>读取从中心平台系统转发过来的数据</remarks>
 private void Receive(UserTokenObject userToken)
 {
     try
     {
         SocketError error;
         _serverSocket.BeginReceive(userToken.Buffer, 0, UserTokenObject.BufferSize, SocketFlags.None, out error, new AsyncCallback(ReceiveCallback), userToken);
         if (error != SocketError.Success)
         {
             CloseSocket();
             Console.WriteLine("Receive: " + error.ToString());
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex);
     }
 }
 /// <summary>
 /// 连接回调函数
 /// </summary>
 /// <param name="ar"></param>
 private void ConnectCallback(IAsyncResult ar)
 {
     try
     {
         Socket socket = (Socket)ar.AsyncState;
         socket.EndConnect(ar);
         //发送认证内容到GpsServer程序
         OnConnected(this, null);
         UserTokenObject userToken = new UserTokenObject();
         userToken.AssociatedID = socket.RemoteEndPoint.ToString();
         userToken.WorkSocket   = socket;
         Receive(userToken);
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex);
     }
 }