大概有100个客户端,一个服务器,采用TCP连接,下面这样写一个高手说不对,说下面写的不叫多线程,实现不了100个客户端与服务器通信的。请教,该怎么改进?以下代码是服务器端程序。客户端只发送数据。
我测试了2个客户端与这个服务器端通信,服务器端界面上能收到不同客户端发送过来的数据啊,但是没有环境测试多个客户端与服务器端通信。
        private void ServerForm_Load(object sender, EventArgs e)
        {
            //测试线程
            Thread SoceketTestThread = new Thread(new ThreadStart(StartListening));
            SoceketTestThread.Start();
                           
            //实例化
            Set_Text = new set_Text(set_ListViewCarFlowText); 
        }        /// <summary>
        /// 开启端口监听线程
        /// </summary>
        private void StartListening()
        {
            listener = new TcpListener(IPAddress.Parse(m_serverIP), int.Parse(m_serverPort));
            listener.Start();
            while (StartListeningFlg)
            {
                try
                {
                    //一旦在该端口号监听到信息,则启动一个新的线程
                    Socket s = listener.AcceptSocket();
                    //判断是否处在连接状态中
                    if (s.Connected == true)
                    {
                        clientsocket = s;
                        clientservice = new Thread(new ThreadStart(ServiceClient));
                        clientservice.Start();
                    }
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.ToString());
                    return;
                }
            }
            //停止监听
            listener.Stop();
        }        /// <summary>
        /// 开启对客户端信息的接收处理线程
        /// </summary>
        private void ServiceClient()
        {
            try
            {
                while (ServiceClientFlg)
                {
                    Byte[] buffer = new Byte[1024];                    //设置该socket为阻止模式
                    clientsocket.Blocking = true;
                    //获取客户端IP地址
                    IPEndPoint ipe = (IPEndPoint)clientsocket.RemoteEndPoint;
  
                    //接收二进制byte数据
                    int intRec = clientsocket.Receive(buffer);
                    if (intRec < 1)
                    {
                        clientsocket.Close();
                        //委托相关,用以该线程操控主线程上的控件
                        listViewCarFlow.Invoke(Set_Text, new object[] { "\r\n" + "已经断开连接" });
                        break;
                    }                    //将二进制数据信息转换成字符串型
                    string strReceiveMessage = System.Text.Encoding.ASCII.GetString(buffer);
       
                    //委托相关,用以该线程操控主线程上的控件
                    listViewCarFlow.Invoke(Set_Text, new object[] { "\r\n" + strReceiveMessage });                    //发送到客户端
                    byte[] bs = Encoding.ASCII.GetBytes("i have recevied from" + strIP);
                    clientsocket.Send(bs, bs.Length, 0);
                }
            }
            catch (Exception ex)
            {
                clientsocket.Close();
            }
        }

解决方案 »

  1.   

    怎么不对,你这是一个客户端开一个socket,那么有多少个中断就有多少个客户端连接,你的那个高手是不是认为在一个进程里开100个线程啊,而不是开100个进程
      

  2.   

    怎么不对,你这是一个客户端开一个socket,那么有多少个中断就有多少个客户端连接,你的那个高手是不是认为在一个进程里开100个线程啊,而不是开100个进程 
      

  3.   

    if (s.Connected == true)
                        {
                            clientsocket = s;--> clientsocket这里,你这样测试一下:
    client A: 连接
    client A: 发送消息 ABC
    client B: 连接
    client B: 发送消息 CBA
    client A: 发送消息 DEF