Exemple #1
0
        /// <summary>
        /// 服务器端不停的接收客户端发来的消息
        /// </summary>
        /// <param name="o"></param>
        void Received(object o)
        {
            ServerDeal serverDeal = o as ServerDeal;
            Socket     curSocket  = serverDeal.socket;

            //设置接受时间的超时时间(客户端会定时发心跳包)
            //curSocket.ReceiveTimeout = Constants.HEART_BEAT_TIME;
            try {
                while (true)
                {
                    //客户端连接服务器成功后,服务器接收客户端发送的消息
                    byte[] buffer = new byte[1024 * 1024 * 3];
                    //实际接收到的有效字节数
                    if (IsSocketConnected(curSocket, serverDeal))
                    {
                        int len = curSocket.Receive(buffer);
                        //如果当前已断开
                        if (len <= 0 || !IsSocketConnected(curSocket, serverDeal))
                        {
                            clientBreakUp(serverDeal, curSocket);
                            break;
                        }

                        //获取服务器传来的消息
                        serverDeal.msg = Encoding.UTF8.GetString(buffer, 0, len);

                        //屏幕上显示(测试)
                        ShowMsg(curSocket.RemoteEndPoint + ": receive " + serverDeal.msg);

                        //服务器处理该进程
                        serverDeal.processUpdate();
                    }
                    else
                    {
                        clientBreakUp(serverDeal, curSocket);
                        break;
                    }
                }
            }
            catch (Exception ee) {
                ShowMsg(ee.ToString());
                clientBreakUp(serverDeal, curSocket);
            }
        }