public DataReceivedArgs(EnumNetworkType type, IPEndPoint localEP, IPEndPoint remoteEP, TPackage package) { NetProtocolType = type; LocalEP = localEP; RemoteEP = remoteEP; Package = package; }
private void parseSignal(ParseTypes.Network si, ParseTypes.BasicInfo basicInfo, ParseTypes.Operator op, ParseTypes.Status sta, ParseTypes.Traffic tra) { EnumNetworkType type = (EnumNetworkType)System.Enum.Parse(typeof(EnumNetworkType), basicInfo.workmode.Replace(" ", "_")); chLabel(label22, getTypeNet(int.Parse(sta.CurrentNetworkTypeEx))); int a = 0; int.TryParse(sta.SignalIcon, out a); signalStrength1.Strength = a; chLabel(label25, op.FullName); chLabel(label33, op.FullName); chLabel(label36, op.ShortName); chLabel(label39, calcM(tra.CurrentUploadRate) + "/sec"); chLabel(label40, calcM(tra.CurrentDownloadRate) + "/sec"); chLabel(toolStripStatusLabel2, getConnStatus(int.Parse(sta.ConnectionStatus))); chLabel(label3, si.cell_id.ToString()); chLabel(label5, si.rsrq); chLabel(label6, si.rsrp); chLabel(label9, si.rssi); chLabel(label11, si.sinr); chLabel(label24, si.rscp); try { TimeSpan t = TimeSpan.FromSeconds(int.Parse(tra.CurrentConnectTime)); string answer = string.Format("{0:D2}h {1:D2}m {2:D2}s", t.Hours, t.Minutes, t.Seconds, t.Milliseconds); chLabel(label45, answer); } catch { } chLabel(label41, calcM(tra.CurrentDownload)); chLabel(label43, calcM(tra.CurrentUpload)); chLabel(label18, basicInfo.DeviceName); chLabel(label19, basicInfo.Imei); chLabel(label20, basicInfo.SerialNumber); chLabel(label14, basicInfo.HardwareVersion); chLabel(label12, basicInfo.SoftwareVersion); chLabel(label28, sta.WanIPAddress); chLabel(label29, basicInfo.MacAddress1); }
/// <summary> /// 通常用于构建TCP服务端的客户端 /// </summary> /// <param name="socket"></param> /// <param name="type"></param> /// <param name="dataBufferSize"></param> /// <param name="socketRecvBufferSize"></param> /// <param name="socketSendBufferSize"></param> public AbsSocketNetBase(Socket socket, EnumNetworkType type, int dataBufferSize, int socketRecvBufferSize, int socketSendBufferSize) : this(type, dataBufferSize, socketRecvBufferSize, socketSendBufferSize) { m_localEndPoint = (IPEndPoint)socket.LocalEndPoint; m_remoteEndPoint = (IPEndPoint)socket.RemoteEndPoint; m_socket = socket; m_socket.ReceiveBufferSize = socketRecvBufferSize; m_socket.SendBufferSize = socketSendBufferSize; m_socket.NoDelay = true; Interlocked.Exchange(ref m_socketStatus, (int)EnumNetworkStatus.Established); }
public override void DecodeParse(EnumNetworkType netType, byte[] data, int offset, int length, IPEndPoint remoteEP, IPEndPoint localEP) { //1.这里实现自定义数据解码,如TCP的粘包处理 //.... //....代码省略 //.... //解析一包完成后记得发布事件,类似如下 var packA = new ProtocolPackageAAAAA() { Name = "我是收到的AAAAA数据", }; base.PublishData(netType, remoteEP, localEP, packA); }
private void Init(EnumNetworkType type, int dataBufferSize, int socketRecvBufferSize, int socketSendBufferSize) { m_socketStatus = (int)EnumNetworkStatus.Undefined; m_netProtocolType = type; m_dataBufferSize = dataBufferSize; m_socketRecvBufferSize = socketRecvBufferSize; m_socketSendBufferSize = socketSendBufferSize; m_dataBuffer = new byte[m_dataBufferSize]; m_recvEventArgs = new SocketAsyncEventArgs(); //m_recvEventArgs.RemoteEndPoint = new IPEndPoint(IPAddress.Any, 0); //m_recvEventArgs.UserToken = this; if (m_netProtocolType == EnumNetworkType.UDP || m_netProtocolType == EnumNetworkType.Multicast) { //TCP启动接收为ReceiveAsync //UDP启动接收为ReceiveFromAsync,此处必须对RemoteEndPoint赋值,这样接收时才能获取是谁发来的 m_recvEventArgs.RemoteEndPoint = new IPEndPoint(IPAddress.Any, 0); } m_recvEventArgs.SetBuffer(m_dataBuffer, 0, m_dataBuffer.Length);//设置接收缓冲区 m_recvEventArgs.Completed += new EventHandler <SocketAsyncEventArgs>(OnReceiveIOCompleted); }
/// <summary> /// 自定义解码,协议解析完成后需调用PublishData()函数发布事件给应用层 /// </summary> /// <param name="netType"></param> /// <param name="data">接受缓冲区</param> /// <param name="offset">目标数据偏移</param> /// <param name="length">目标数据长度</param> /// <param name="remoteEP">数据来源地址</param> /// <param name="localEP">本地绑定地址</param> public abstract void DecodeParse(EnumNetworkType netType, byte[] data, int offset, int length, IPEndPoint remoteEP, IPEndPoint localEP);
/// <summary> /// 发布收数事件 /// </summary> /// <param name="netType"></param> /// <param name="remoteEP"></param> /// <param name="localEP"></param> /// <param name="pack"></param> protected void PublishData(EnumNetworkType netType, IPEndPoint remoteEP, IPEndPoint localEP, TPackage pack) { PublishData(new DataReceivedArgs <TPackage>(netType, localEP, remoteEP, pack)); }
/// <summary> /// 创建TCP/UDP客户端,自定义收发缓冲区大小 /// </summary> /// <typeparam name="TBuilder">协议解包自定义实现</typeparam> /// <typeparam name="TPackage">自定义用户层数据包</typeparam> /// <param name="type">TCP或者UDP</param> /// <param name="dataRecvSize">数据接收缓冲区大小</param> /// <param name="socketRecvSize">Socket接收缓冲区大小</param> /// <param name="socketSendSize">Socket发送缓冲区大小</param> /// <returns></returns> public static ISocketNetClient <TPackage> CreateSocketNetClient <TBuilder, TPackage>(EnumNetworkType type, int dataRecvSize, int socketRecvSize, int socketSendSize) where TBuilder : AbsProtocolBuilder <TPackage>, new() { return(new SocketNetClient <TBuilder, TPackage>(type, dataRecvSize, socketRecvSize, socketSendSize)); }
/// <summary> /// 通知子类收到数据 /// </summary> /// <param name="type"></param> /// <param name="data"></param> /// <param name="offset"></param> /// <param name="length"></param> /// <param name="remoteEP"></param> protected abstract void SocketDataReceived(EnumNetworkType type, byte[] data, int offset, int length, IPEndPoint remoteEP);
/// <summary> /// TCP/UDP主动创建 /// </summary> /// <param name="localEP">默认本机地址,可为null,启动时再给定</param> /// <param name="remoteEP">默认远端地址,可为null,启动时再给定</param> /// <param name="type"></param> /// <param name="dataBufferSize"></param> /// <param name="socketRecvBufferSize"></param> /// <param name="socketSendBufferSize"></param> public AbsSocketNetBase(IPEndPoint localEP, IPEndPoint remoteEP, EnumNetworkType type, int dataBufferSize, int socketRecvBufferSize, int socketSendBufferSize) : this(type, dataBufferSize, socketRecvBufferSize, socketSendBufferSize) { m_localEndPoint = localEP; m_remoteEndPoint = remoteEP; }
/// <summary> /// TCP创建 或 UDP创建 /// </summary> /// <param name="type">TCP\UDP</param> /// <param name="dataBufferSize">异步套接字数据缓冲大小(用户数据区)</param> /// <param name="socketRecvBufferSize">socket接收缓冲大小</param> /// <param name="socketSendBufferSize">socket发送缓冲大小</param> public AbsSocketNetBase(EnumNetworkType type, int dataBufferSize, int socketRecvBufferSize, int socketSendBufferSize) { Init(type, dataBufferSize, socketRecvBufferSize, socketSendBufferSize); }
protected override void SocketDataReceived(EnumNetworkType type, byte[] data, int offset, int length, IPEndPoint remoteEP) { m_protocolBuilder.DecodeParse(type, data, offset, length, remoteEP, LocalEndPoint); }
/// <summary> /// 用于TCP服务端的客户端 /// </summary> /// <param name="socket"></param> /// <param name="type"></param> /// <param name="dataRecvSize"></param> /// <param name="socketRecvSize"></param> /// <param name="socketSendSize"></param> public SocketNetClient(Socket socket, EnumNetworkType type, int dataRecvSize, int socketRecvSize, int socketSendSize) : base(socket, type, dataRecvSize, socketRecvSize, socketSendSize) { m_protocolBuilder = new TBuilder(); m_protocolBuilder.Socket = this; }