public bool ProcessPacketHeader(ClientSocket clientSocket) { try { IPacketHeader packetHeader = ET_NetworkChannelHelper.DeserializePacketHeader(clientSocket.ReceiveState.Stream); if (packetHeader == null) { string errorMessage = "Packet header is invalid."; Debug.LogError(errorMessage); throw new Exception(errorMessage); } clientSocket.ReceiveState.PrepareForPacket(packetHeader); if (packetHeader.PacketLength <= 0) //一般不会满足 { return(ProcessPacket(clientSocket)); } } catch (Exception exception) { Debug.LogError(exception); throw; } return(true); }
/// <summary> /// 发送数据 /// </summary> /// <param name="cs"></param> /// <param name="msgBase"></param> public void Send(ClientSocket cs, SCPacketBase msgBase) { KDCommon.Log("send=" + (CMD)msgBase.Id, LogType.Info); if (cs == null || !cs.Socket.Connected) { return; } bool serializeResult = false; try { cs.SendState.Reset(); serializeResult = ET_NetworkChannelHelper.Serialize(msgBase, cs.SendState.Stream); try { if (serializeResult) { cs.SendState.Stream.Position = 0L; SendAsync(cs); } } catch (SocketException ex) { Debug.LogError("Socket BeginSend Error:" + ex); } } catch (SocketException ex) { Debug.LogError("Socket发送数据失败:" + ex); } cs.SendState.Stream.Position = 0L; }
public void StartAsServer(string ipstr, int port) { IPAddress ip = IPAddress.Parse(ipstr); IPEndPoint ipEndPoint = new IPEndPoint(ip, port); m_ListenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); m_ListenSocket.Bind(ipEndPoint); m_ListenSocket.Listen(50000); ET_NetworkChannelHelper.Initialize(); Debug.Log("服务器启动监听{0}成功", m_ListenSocket.LocalEndPoint.ToString()); //while (true) { // //处理找出所有socket // ResetCheckRead(); // try { // //最后等待时间单位是微妙 // Socket.Select(m_CheckReadList, null, null, 1000); // } // catch (Exception e) { // Debug.LogError(e); // } // for (int i = m_CheckReadList.Count - 1; i >= 0; i--) { // Socket s = m_CheckReadList[i]; // if (s == m_ListenSocket) { // //说明有客户端链接到服务器了,所以服务器socket可读 // ReadListen(s); // } // else { // //说明链接的客户端可读,证明有信息传上来了 // ReadClient(s); // } // } // //检测是否心跳包超时的计算 // long timeNow = GetTimeStamp(); // m_TempList.Clear(); // foreach (ClientSocket clientSocket in m_TempList) { // CloseClient(clientSocket); // } // m_TempList.Clear(); //} }
private void ConnectServer() { if (m_CustomNetworkChannelHelper != null) { m_CustomNetworkChannelHelper.Shutdown(); } if (m_NetworkChannel != null) { m_NetworkChannel.Close(); } m_CustomNetworkChannelHelper = new ET_NetworkChannelHelper(); m_NetworkChannel = GameEntry.Network.CreateNetworkChannel("tcp" + m_ConnectTime++, GameFramework.Network.ServiceType.TcpWithSyncReceive, m_CustomNetworkChannelHelper); IPAddress iPAddress = IPAddress.Parse("192.168.31.32"); //IPAddress iPAddress = IPAddress.Parse("129.28.170.32"); m_NetworkChannel.Connect(iPAddress, SrvCfg.srvPort); //StartCoroutine(client.CheckNet()); }
private bool ProcessPacket(ClientSocket clientSocket) { try { Packet packet = ET_NetworkChannelHelper.DeserializePacket(clientSocket.ReceiveState.PacketHeader, clientSocket.ReceiveState.Stream); if (packet != null) { //分发消息 lsw CSPacketBase cSPacketBase = (CSPacketBase)packet; if (cSPacketBase != null) { clientSocket.OnReciveMsg(cSPacketBase); } else { Debug.LogError("解析失败!"); } //C2R_Login r_Login = ((C2R_Login)packet); //Debug.LogError(r_Login.Account); //Debug.LogError(r_Login.Password); ////m_ReceivePacketPool.Fire(this, packet); } else { Debug.LogError("解析包失败"); } clientSocket.ReceiveState.PrepareForPacketHeader(5 /*m_NetworkChannelHelper.PacketHeaderLength*/); } catch (Exception exception) { Debug.LogError(exception); throw; } return(true); }