- Socket socket2;
- Thread thread,thread2;
- thread = new Thread(accept);//创建一个线程
- thread.IsBackground = true;//设置为后台线程
- thread.Start();//开始执行线程
- textBox3.AppendText ( "服务器开始监听\n");
- void accept()
- {
- while (true)
- {
-
- socket2 = socketfrist.Accept();//开始监听客户端请求 接收到请求就生成一个新的负责通信的套接字
- thread2 = new Thread(jieshou);//新建一个线程去执行接收客户端消息的方法
- thread2.IsBackground = true;
- thread2.Start();
- ss.Add(socket2 .RemoteEndPoint .ToString (),socket2 );//监听到请求之后 ,把刚创建的套接字存在字典集合里
-
- listBox1.Items.Add(socket2.RemoteEndPoint.ToString());//再插入lisbox框中
- string endpoint =socket2.RemoteEndPoint.ToString ();//获取客户端的ip和端口 也就是终结点
- show("客户端连接成功"+endpoint );
-
- }
- }
- void jieshou()
- {
- while (true)
- {
-
- byte[] mee = new byte[1024 * 1024];
- int length= socket2.Receive(mee);//方法中的接收信息的套接字都是刚生成的 由刚创建的线程去执行
- string mgg = System.Text.Encoding.UTF8.GetString(mee,0,length);
- textBox3.AppendText( mgg + "\n");
- }
- }
复制代码 按道理来说 一旦有客户端连接服务端,就会生成一个负责通信的套接字和一个新的线程,在新的线程就会一直循环执行新的套接字Receive方法,服务端就可以循环接受所有客户端的消息, 为什么运行后服务端只能接收客户端的第一次消息? 而最后连接的一个客户端的消息可以不断接收? |