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

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

本帖最后由 淡.。 于 2013-4-20 12:27 编辑
  1. Thread thread,thread2;
  2. Socket socket2;
  3. thread = new Thread(accept);//创建一个线程
  4.                 thread.IsBackground = true;//设置为后台线程
  5.                 thread.Start();//开始执行线程
  6.                 textBox3.AppendText  ( "服务器开始监听\n");
  7.                 thread2 = new Thread(jieshou);
  8.                 thread2.IsBackground = true;
  9.                 thread2.Start();
  10. void accept()
  11.         {
  12.             while (true)
  13.             {
  14.                
  15.                  socket2 = socketfrist.Accept();//开始监听客户端请求
  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. void jieshou()
  24.         {
  25.             while (true)
  26.             {
  27.                
  28.                 byte[] mee = new byte[1024 * 1024];
  29.                int length= socket2.Receive(mee);
  30.                string mgg = System.Text.Encoding.UTF8.GetString(mee,0,length);
  31.                 textBox3.AppendText(mgg + "\n");
  32.             }
  33.         }
复制代码
系统提示在jieshou方法中socket2说我没有实例化,我在accept()方法中 socket2 = socketfrist.Accept();//已经实例化了  是因为不同线程的原因导致另外一个线程不能访问已实例化的socket2吗,有什么办法能让别的线程访问到该线程的实例化对象呢?

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

2 个回复

倒序浏览
从accept方法中可以看出对socket2进行实例化需要传一定的参数,同样在jieshou方法中需要先对其中的数据进行初始化,使得初始化不再是一成不变的。
回复 使用道具 举报
许庭洲 发表于 2013-4-20 07:24
从accept方法中可以看出对socket2进行实例化需要传一定的参数,同样在jieshou方法中需要先对其中的数据进行 ...

谢谢。这个问题解决了,我把thread2放在accept方法中运行,就能访问实例化后的socket2了,有时候脑子真是突然开窍,问题一下解决了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马