Exemplo n.º 1
0
        private void ReceiveData(object userState)
        {
            TcpUser   user   = (TcpUser)userState;
            TcpClient client = user.client;

            while (!isExit)
            {
                string receiveString          = null;
                ReceiveMessageDelegate d      = new ReceiveMessageDelegate(ReceiveMessage);
                IAsyncResult           result = d.BeginInvoke(user, out receiveString, null, null);
                //使用轮询方式来判断异步操作是否完成
                while (!result.IsCompleted)
                {
                    if (isExit)
                    {
                        break;
                    }
                    Thread.Sleep(250);
                }
                //获取Begin方法的返回值和所有输入/输出参数
                d.EndInvoke(out receiveString, result);
                if (receiveString == null)
                {
                    if (!isExit)
                    {
                        RemoveUser(user);
                    }
                    break;
                }

                AsyncSendToClient(user, receiveString);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 监听客户端请求
        /// </summary>
        private void ListenClientConnect()
        {
            TcpClient newClient = null;

            while (true)
            {
                ListenClientDelegate d      = new ListenClientDelegate(ListenClient);
                IAsyncResult         result = d.BeginInvoke(out newClient, null, null);
                //使用轮询方式来判断异步操作是否完成
                while (result.IsCompleted == false)
                {
                    if (isExit)
                    {
                        break;
                    }
                    Thread.Sleep(250);
                }
                //获取Begin 方法的返回值和所有输入/输出参数
                d.EndInvoke(out newClient, result);
                if (newClient != null)
                {
                    //每接受一个客户端连接,就创建一个对应的线程循环接收该客户端发来的信息
                    TcpUser user          = new TcpUser(newClient);
                    Thread  threadReceive = new Thread(ReceiveData);
                    threadReceive.Start(user);
                    userList.Add(user);
                }
                else
                {
                    break;
                }
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// 接收客户端发来的信息
 /// </summary>
 /// <param name="user"></param>
 /// <param name="receiveMessage"></param>
 private void ReceiveMessage(TcpUser user, out string receiveMessage)
 {
     try
     {
         receiveMessage = user.br.ReadString();
     }
     catch (Exception ex)
     {
         receiveMessage = null;
     }
 }
Exemplo n.º 4
0
 /// <summary>
 /// 发送message给user
 /// </summary>
 /// <param name="user"></param>
 /// <param name="message"></param>
 private bool SendToClient(TcpUser user, string message)
 {
     try
     {
         //将字符串写入网络流,此方法会自动附加字符串长度前缀
         user.bw.Write(message);
         user.bw.Flush();
         return(true);
     }
     catch
     {
         return(false);
     }
 }
Exemplo n.º 5
0
        /// <summary>
        /// 异步发送message给user
        /// </summary>
        /// <param name="user"></param>
        /// <param name="message"></param>
        private void AsyncSendToClient(TcpUser user, string message)
        {
            SendToClientDelegate d      = new SendToClientDelegate(SendToClient);
            IAsyncResult         result = d.BeginInvoke(user, message, null, null);

            while (result.IsCompleted == false)
            {
                if (isExit)
                {
                    break;
                }
                Thread.Sleep(250);
            }
            d.EndInvoke(result);
        }
Exemplo n.º 6
0
 /// <summary>
 /// 移除用户
 /// </summary>
 /// <param name="user"></param>
 private void RemoveUser(TcpUser user)
 {
     userList.Remove(user);
     user.Close();
 }