コード例 #1
0
ファイル: NetManager.cs プロジェクト: FhToday/Game
    //发送
    public static void Send(ClientState cs, MsgBase msg)
    {
        //状态判断
        if (cs == null)
        {
            return;
        }
        if (!cs.socket.Connected)
        {
            return;
        }
        //数据编码
        byte[] nameBytes = MsgBase.EncodeName(msg);
        byte[] bodyBytes = MsgBase.Encode(msg);
        int    len       = nameBytes.Length + bodyBytes.Length;

        byte[] sendBytes = new byte[2 + len];
        //组装长度
        sendBytes[0] = (byte)(len % 256);
        sendBytes[1] = (byte)(len / 256);
        //组装名字
        Array.Copy(nameBytes, 0, sendBytes, 2, nameBytes.Length);
        //组装消息体
        Array.Copy(bodyBytes, 0, sendBytes, 2 + nameBytes.Length, bodyBytes.Length);
        //为简化代码,调用同步方法
        cs.socket.Send(sendBytes);
    }
コード例 #2
0
    //发送
    public static void Send(ClientState cs, MsgBase msg)
    {
        //状态判断
        if (cs == null)
        {
            return;
        }
        if (!cs.socket.Connected)
        {
            return;
        }
        //数据编码
        byte[] nameBytes = MsgBase.EncodeName(msg);
        byte[] bodyBytes = MsgBase.Encode(msg);
        int    len       = nameBytes.Length + bodyBytes.Length;

        byte[] sendBytes = new byte[2 + len];
        //组装长度
        sendBytes[0] = (byte)(len % 256);
        sendBytes[1] = (byte)(len / 256);
        //组装名字
        Array.Copy(nameBytes, 0, sendBytes, 2, nameBytes.Length);
        //组装消息体
        Array.Copy(bodyBytes, 0, sendBytes, 2 + nameBytes.Length, bodyBytes.Length);
        //为简化代码,不设置回调
        try{
            cs.socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, null, null);
        }catch (SocketException ex) {
            Console.WriteLine("Socket Close on BeginSend" + ex.ToString());
        }
    }
コード例 #3
0
        public static void Send(ClientState cs, string msg)
        {
            if (cs == null)
            {
                return;
            }
            if (!cs.socket.Connected)
            {
                return;
            }
            MsgBase msgBase = JsonConvert.DeserializeObject <MsgBase>(msg);

            byte[] nameBytes = MsgBase.EncodeName(msgBase);
            byte[] bodyBytes = System.Text.Encoding.UTF8.GetBytes(msg);
            int    len       = nameBytes.Length + bodyBytes.Length;

            byte[] sendBytes = new Byte[2 + len];
            sendBytes[0] = (byte)(len % 256);
            sendBytes[1] = (byte)(len / 256);

            Array.Copy(nameBytes, 0, sendBytes, 2, nameBytes.Length);
            Array.Copy(bodyBytes, 0, sendBytes, 2 + nameBytes.Length, bodyBytes.Length);
            try
            {
                cs.socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, null, null);
            }
            catch (SocketException ex)
            {
                Debug.WriteLine("Socket Close on BeginSend {0}", ex.ToString());
                throw;
            }
        }
コード例 #4
0
        public static void Send(ClientState state, MsgBase msgBase)
        {
            if (!state.socket.Connected || state == null)
            {
                return;
            }

            byte[] nameBytes = MsgBase.EncodeName(msgBase);

            byte[] bodyBytes = MsgBase.Encode(msgBase);

            Int16 len = (Int16)(nameBytes.Length + bodyBytes.Length);

            byte[] readBuff = new byte[len + 2];

            readBuff[0] = (byte)(len % 256);

            readBuff[1] = (byte)(len / 256);

            Array.Copy(nameBytes, 0, readBuff, 2, nameBytes.Length);

            Array.Copy(bodyBytes, 0, readBuff, 2 + nameBytes.Length, bodyBytes.Length);

            ByteArray array = new ByteArray(readBuff);

            try
            {
                state.socket.BeginSend(array.bytes, array.readIndex, array.length, 0, SendCallBack, state);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Socket Close On BeginSend " + ex.ToString());
            }
        }
コード例 #5
0
    public static void Send(ClientState state, MsgBase msg)
    {
        if (state == null || !state.socket.Connected)
        {
            return;
        }

        byte[] nameBytes = MsgBase.EncodeName(msg);
        byte[] bodyBytes = MsgBase.Encode(msg);
        int    length    = nameBytes.Length + bodyBytes.Length;

        byte[] sendBytes = new byte[length + 2];
        sendBytes[0] = (byte)(length % 256);
        sendBytes[1] = (byte)(length / 256);

        Array.Copy(nameBytes, 0, sendBytes, 2, nameBytes.Length);
        Array.Copy(bodyBytes, 0, sendBytes, 2 + nameBytes.Length, bodyBytes.Length);

        try
        {
            Console.WriteLine("Send { " + msg.msgName + " } to " + state.socket.RemoteEndPoint);
            state.socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, null, null);
        }
        catch (SocketException ex)
        {
            Console.WriteLine("Socket send message error " + ex.ToString());
        }
    }
コード例 #6
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);
            }
        }
コード例 #7
0
    //发送数据
    public static void Send(MsgBase msg)
    {
        //状态判断
        if (socket == null || !socket.Connected)
        {
            return;
        }
        if (isConnecting)
        {
            return;
        }
        if (isClosing)
        {
            return;
        }
        //数据编码
        byte[] nameBytes = MsgBase.EncodeName(msg);
        byte[] bodyBytes = MsgBase.Encode(msg);
        int    len       = nameBytes.Length + bodyBytes.Length;

        // byte[] sendBytes = new byte[INT32+len+1];
        // sendBytes[INT32+len] = System.Text.Encoding.UTF8.GetBytes("\n")[0];
        byte[] sendBytes = new byte[INT32 + len];
        byte[] lenBytes  = ArrayUtils.intToByteArray(len);
        for (int i = 0; i < INT32; i++)
        {
            sendBytes[i] = lenBytes[i];
        }
        //组装长度
        // sendBytes[0] = (byte)(len%256);
        // sendBytes[1] = (byte)(len/256);
        //组装名字
        Array.Copy(nameBytes, 0, sendBytes, INT32, nameBytes.Length);
        //组装消息体
        Array.Copy(bodyBytes, 0, sendBytes, INT32 + nameBytes.Length, bodyBytes.Length);
        // for(int i=0;i<sendBytes.Length;i++){
        //  Debug.Log(sendBytes[i]);
        // }
        //写入队列
        ByteArray ba    = new ByteArray(sendBytes);
        int       count = 0;    //writeQueue的长度

        lock (writeQueue){
            writeQueue.Enqueue(ba);
            count = writeQueue.Count;
        }


        //send
        if (count == 1)
        {
            socket.BeginSend(sendBytes, 0, sendBytes.Length,
                             0, SendCallback, socket);
        }
    }
コード例 #8
0
    // Use this for initialization
    void Start()
    {
        //Json测试
        MsgMove msgMove = new MsgMove();

        byte[] bs = MsgBase.EncodeName(msgMove);

        int    count;
        string name = MsgBase.DecodeName(bs, 0, out count);

        Debug.Log(name);
        Debug.Log(count);
    }
コード例 #9
0
    // 发送数据
    public static void Send(MsgBase msg)
    {
        // 状态判断
        if (socket == null || !socket.Connected)
        {
            return;
        }
        if (isConnecting)
        {
            return;
        }
        if (isClosing)
        {
            return;
        }

        // 数据编码
        byte[] nameBytes = MsgBase.EncodeName(msg);             // 协议名长度+协议名
        byte[] bodyBytes = MsgBase.Encode(msg);                 // 协议体
        int    len       = nameBytes.Length + bodyBytes.Length; // 总长度

        byte[] sendBytes = new byte[2 + len];

        // 组装总长度
        sendBytes[0] = (byte)(len % 256);
        sendBytes[1] = (byte)(len / 256);
        // 组装协议名
        Array.Copy(nameBytes, 0, sendBytes, 2, nameBytes.Length);
        // 组装协议体
        Array.Copy(bodyBytes, 0, sendBytes, 2 + nameBytes.Length, bodyBytes.Length);

        // 写入队列
        ByteArray ba    = new ByteArray(sendBytes);
        int       count = 0; // writeQueue的长度

        lock (writeQueue)
        {
            writeQueue.Enqueue(ba);
            count = writeQueue.Count;
        }

        // Send
        if (count == 1)
        {
            socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, SendCallback, socket);
        }
    }
コード例 #10
0
    //发送数据
    public static void Send(MsgBase msg)
    {
        if (socket == null || !socket.Connected)
        {
            return;
        }
        if (isConnecting)
        {
            return;
        }
        if (isClosing)
        {
            return;
        }
        //数据编码
        byte[] nameBytes = MsgBase.EncodeName(msg);    //名字
        byte[] bodyBytes = MsgBase.Encode(msg);        //消息体
        int    len       = nameBytes.Length + bodyBytes.Length;

        byte[] sendBytes = new byte[2 + len];
        //组装长度
        sendBytes[0] = (byte)(len % 256);
        sendBytes[1] = (byte)(len / 256);
        //组装名字
        Array.Copy(nameBytes, 0, sendBytes, 2, nameBytes.Length);
        //组装消息体
        Array.Copy(bodyBytes, 0, sendBytes, 2 + nameBytes.Length, bodyBytes.Length);
        //写入队列
        ByteArray ba    = new ByteArray(sendBytes);
        int       count = 0;

        lock (writeQueue)        //lock  避免线程冲突
        {
            writeQueue.Enqueue(ba);
            count = writeQueue.Count;
        }
        //send
        if (count == 1)
        {
            socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, SendCallback, socket);
        }
    }
コード例 #11
0
    public static void Send(MsgBase msg)
    {
        if (socket == null || !socket.Connected)
        {
            return;
        }
        if (isConnecting)
        {
            return;
        }
        if (isClosing)
        {
            return;
        }


        byte[] nameBytes = MsgBase.EncodeName(msg);
        byte[] bodyBytes = MsgBase.Encode(msg);
        int    len       = nameBytes.Length + bodyBytes.Length;

        byte[] sendBytes = new byte[2 + len];
        sendBytes[0] = (byte)(len % 256);
        sendBytes[1] = (byte)(len / 256);
        Array.Copy(nameBytes, 0, sendBytes, 2, nameBytes.Length);
        Array.Copy(bodyBytes, 0, sendBytes, 2 + nameBytes.Length, bodyBytes.Length);
        ByteArray byteArray = new ByteArray(sendBytes);
        int       count     = 0;

        lock (writeQueue)
        {
            writeQueue.Enqueue(byteArray);
            count = writeQueue.Count;
        }
        if (count == 1)
        {
            socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, SendCallback, socket);
        }
        socket.Send(sendBytes);
    }
コード例 #12
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();
     }
 }