/// <summary> /// 发送数据 /// </summary> /// <param name="clientSocket"></param> /// <param name="msgBase"></param> public static void SendMessage(ClientSocket clientSocket, MsgBase msgBase) { if (clientSocket == null || !clientSocket.Socket.Connected) { return; } try { //分为三部分,头:总协议长度;名字;协议内容。 byte[] nameBytes = MsgBase.EncodeName(msgBase); byte[] bodyBytes = MsgBase.Encond(msgBase); int len = nameBytes.Length + bodyBytes.Length; byte[] byteHead = BitConverter.GetBytes(len); byte[] sendBytes = new byte[byteHead.Length + len]; Array.Copy(byteHead, 0, sendBytes, 0, byteHead.Length); Array.Copy(nameBytes, 0, sendBytes, byteHead.Length, nameBytes.Length); Array.Copy(bodyBytes, 0, sendBytes, byteHead.Length + nameBytes.Length, bodyBytes.Length); clientSocket.Socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, null, null); } catch (SocketException ex) { Debug.LogError("Socket发送数据失败:" + ex); } }
/// <summary> /// 发送数据到服务器 /// </summary> /// <param name="msgBase"></param> public void SendMessage(MsgBase msgBase) { if (m_Socket == null || !m_Socket.Connected) { return; } try { byte[] nameBytes = MsgBase.EncodeName(msgBase); byte[] bodyBytes = MsgBase.Encond(msgBase); int len = nameBytes.Length + bodyBytes.Length; byte[] byteHead = BitConverter.GetBytes(len); byte[] sendBytes = new byte[byteHead.Length + len]; Array.Copy(byteHead, 0, sendBytes, 0, byteHead.Length); Array.Copy(nameBytes, 0, sendBytes, byteHead.Length, nameBytes.Length); Array.Copy(bodyBytes, 0, sendBytes, byteHead.Length + nameBytes.Length, bodyBytes.Length); ByteArray ba = new ByteArray(sendBytes); lock (m_WriteQueue) { m_WriteQueue.Enqueue(ba); if (m_WriteQueue.Count == 1) { m_Socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, SendCallBack, m_Socket); } else { Debug.LogError("消息队列数量不止一个"); } } } catch (Exception ex) { Debug.LogError("SendMessage error:" + ex.ToString()); ClientClose(); } }