コード例 #1
0
        /// <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);
            }
        }
コード例 #2
0
 /// <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();
     }
 }