/// <summary> /// 构造方法 /// </summary> /// <param name="t_IP"></param> /// <param name="t_Port"></param> /// <param name="t_AddressFamily"></param> /// <param name="t_INetworkPacketQueue"></param> public UDPClient(string t_IP, int t_Port, INetworkPacketQueue t_INetworkPacketQueue = null, AddressFamily t_AddressFamily = AddressFamily.InterNetwork) { IP = t_IP; Port = t_Port; m_AddressFamily = t_AddressFamily; INetworkPacketQueue = t_INetworkPacketQueue ?? new DefaultNetworkPacketQueue(); }
/// <summary> /// 构造方法 /// </summary> /// <param name="t_IP"></param> /// <param name="t_Port"></param> /// <param name="t_AddressFamily"></param> /// <param name="t_INetworkPacketQueue"></param> public UDPServer(string t_IP, int t_Port, INetworkPacketQueue t_INetworkPacketQueue = null, AddressFamily t_AddressFamily = AddressFamily.InterNetwork) { IP = t_IP; Port = t_Port; m_AddressFamily = t_AddressFamily; INetworkPacketQueue = t_INetworkPacketQueue ?? new DefaultNetworkPacketQueue(); ClientEndPointList = new List <EndPoint>(); }
/// <summary> /// 读数据 /// </summary> /// <param name="t_Socket"></param> /// <param name="t_EndPoint"></param> /// <param name="t_Buffer"></param> /// <param name="t_Length"></param> public void Read(Socket t_Socket, EndPoint t_EndPoint, byte[] t_Buffer, int t_Length) { INetworkPacketQueue.EnNetworkQueue(new NetworkEventArgs() { NetworkState = NetworkStateType.Transparent, Packet = new NetworkPacket() { Buffer = t_Buffer, Length = t_Length, INetwork = this, EndPoint = t_EndPoint } }); }
/// <summary> /// 关闭网络 /// </summary> public void Stop() { INetworkPacketQueue.EnNetworkQueue(new NetworkEventArgs() { NetworkState = NetworkStateType.Stop, Packet = new NetworkPacket() { INetwork = this } }); //消息队列 Socket.Close(); IsActive = false; }
/// <summary> /// 重启网络 /// </summary> public void ReStart() { INetworkPacketQueue.EnNetworkQueue(new NetworkEventArgs() { NetworkState = NetworkStateType.ReStart, Packet = new NetworkPacket() { INetwork = this } }); //消息队列 Stop(); Start(); }
/// <summary> /// 启动网络 /// </summary> public void Start() { Socket = new Socket(m_AddressFamily, SocketType.Dgram, ProtocolType.Udp); Socket.Bind(new IPEndPoint(IPAddress.Parse(IP), Port)); //绑定端口 INetworkPacketQueue.EnNetworkQueue(new NetworkEventArgs() { NetworkState = NetworkStateType.Start, Packet = new NetworkPacket() { INetwork = this } }); //消息队列 AsycReveiveFrom(); IsActive = true; }
/// <summary> /// 启动网络 /// </summary> public void Start() { m_Buffer = new byte[m_BufferSize]; Socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //实例化Socket m_EndPoint = new IPEndPoint(IPAddress.Parse(IP), Port); //服务端的终端信息 INetworkPacketQueue.EnNetworkQueue(new NetworkEventArgs() { NetworkState = NetworkStateType.Start, Packet = new NetworkPacket() { INetwork = this } }); //消息队列 Socket.BeginReceiveFrom(m_Buffer, 0, m_Buffer.Length, SocketFlags.None, ref m_EndPoint, new AsyncCallback(AsycReveiveFrom), null); IsActive = true; }
/// <summary> /// 创建网络 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="t_NetworkName"></param> /// <param name="t_IP"></param> /// <param name="t_Port"></param> /// <param name="t_INetworkQueue"></param> /// <returns></returns> public T CreateNetwork <T>(string t_NetworkName, string t_IP, int t_Port, INetworkPacketQueue t_INetworkPacketQueue = null, AddressFamily t_AddressFamily = AddressFamily.InterNetwork) where T : INetwork { INetwork t_INetwork = null; if (IMapDataStructure.ContainsKey(t_NetworkName)) { IMapDataStructure.TryGetValue(t_NetworkName, out t_INetwork); return((T)t_INetwork); } else { object[] t_Parameters = new object[] { t_IP, t_Port }; T t_Instance = (T)System.Activator.CreateInstance(typeof(T), t_IP, t_Port, t_INetworkPacketQueue ?? new DefaultNetworkPacketQueue(), t_AddressFamily); IMapDataStructure.Add(t_NetworkName, t_Instance); t_Instance.Start(); return(t_Instance); } }
/// <summary> /// 创建网络 /// </summary> /// <typeparam name="T">网络的类型</typeparam> /// <param name="t_NetworkName">网络的名字</param> /// <param name="t_IP">IP</param> /// <param name="t_Port">Port</param> /// <param name="t_INetworkPacketQueue">网络消息包队列</param> /// <param name="t_AddressFamily">寻址方案</param> /// <returns>网络的类型对应的实例</returns> public T CreateNetwork <T>(string t_NetworkName, string t_IP, int t_Port, INetworkPacketQueue t_INetworkPacketQueue = null, AddressFamily t_AddressFamily = AddressFamily.InterNetwork) where T : INetwork { return(m_INetworkManager.CreateNetwork <T>(t_NetworkName, t_IP, t_Port, t_INetworkPacketQueue, t_AddressFamily)); }