/// <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); } }
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); } }