A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈行 高级黑马   /  2013-4-20 15:59  /  834 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马