예제 #1
0
        }     // recCallBack

        /// <summary>
        /// 回调函数发:送数据
        /// </summary>
        /// <param name="ar">the ar</param>
        public static void sendCallBack(IAsyncResult ar)
        {
            // 当前用户实例
            User currentUser = User.GetInstance();

            SendCallBackParam sendCallBackParam = (SendCallBackParam)ar.AsyncState;
            ListBox           lstBox_recMsg     = sendCallBackParam.lstBox_recMsg;
            string            strSend           = sendCallBackParam.strSend;

            DelegateMem.AppendDelegate appendString = sendCallBackParam.appendString;

            try
            {
                //异步通信 结束数据的异步发送
                currentUser.socket.EndSend(ar);

                strSend = "发:" + strSend;

                // 在右侧显示
                string showStr = strSend.PadLeft(lstBox_recMsg.Width / 10, ' ');
                lstBox_recMsg.Invoke(appendString, lstBox_recMsg, showStr);
            } // try

            catch (System.Exception ex)
            {
                SocketHandler.ShutDownConn(currentUser.socket);
                lstBox_recMsg.Invoke(appendString, lstBox_recMsg, "服务器断开了TCP连接");
            } // catch
        }     // sendCallBack
예제 #2
0
        /// <summary>
        /// 回调函数:接受消息
        /// </summary>
        /// <param name="ar">the ar</param>
        public static void recCallBack(IAsyncResult ar)
        {
            try
            {
                // 接受消息的缓冲槽
                byte[] recvBuffer = (byte[])ar.AsyncState;

                // 当前用户的实例
                User currentUser = User.GetInstance();

                // 接受到的每一条消息
                RecvdMsg recvMsg = new RecvdMsg();

                // 消息列表实例
                MsgList msgList = MsgList.GetInstance();

                try
                {
                    int    i        = currentUser.socket.EndReceive(ar);
                    string str_data = Encoding.UTF8.GetString(recvBuffer, 0, i);

                    // 解析数据
                    C2CAnayMsg c2cAnayMsg = new C2CAnayMsg(str_data);

                    // 初始化收到信息类
                    recvMsg.type     = c2cAnayMsg.type;
                    recvMsg.userName = c2cAnayMsg.srcUser;
                    recvMsg.srcIP    = c2cAnayMsg.srcIP;
                    recvMsg.destName = c2cAnayMsg.destName;
                    recvMsg.content  = c2cAnayMsg.content;

                    if (recvMsg.type != null)
                    {
                        msgList.recvMsgList.Add(recvMsg);
                    } // if

                    recvBuffer = new byte[currentUser.socket.SendBufferSize];

                    //循环接收
                    AsyncCallback callBack = new AsyncCallback(recCallBack);

                    //异步调用
                    currentUser.socket.BeginReceive(recvBuffer, 0, recvBuffer.Length, SocketFlags.None, callBack, recvBuffer);//开始从连接的Socket中接收数据
                } // try

                catch (System.Exception ex)
                {
                    if (currentUser.socket != null)
                    {
                        SocketHandler.ShutDownConn(currentUser.socket);
                    } // if
                }     /// catch
            }         // try

            catch (System.Exception ex)
            {
                // 封装客户端停止连接时的异常
            } // catch
        }     // recCallBack