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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


if (flag)
            {            
                Thread RecMsgthd = new Thread(RecMsg);
                RecMsgthd.IsBackground = true;
                RecMsgthd.Start(sokConnection);
            }
这一块一直读不到,是什么原因呢?
  1.        public Form1()
  2.         {
  3.             InitializeComponent();
  4.             TextBox.CheckForIllegalCrossThreadCalls = false;
  5.         }
  6.         Socket socketWatch;
  7.         Dictionary<string, Socket> dict = new Dictionary<string, Socket>();
  8.         bool flag = false;
  9.         private void btnBegin_Click(object sender, EventArgs e)
  10.         {
  11.             //创建负责监听的套接字,参数(使用IP4寻址协议,使用流式连接,使用TCP协议传输数据 )
  12.             socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  13.             //获得文本框中的IP地址对象
  14.             IPAddress adress = IPAddress.Parse(txtIP.Text.Trim());
  15.             //创建包含ip和端口的网络节点对象
  16.             IPEndPoint endpoint = new IPEndPoint(adress, int.Parse(txtPORT.Text.Trim()));
  17.             //将负责监听的套接字 绑定到唯一IP和端口上
  18.             socketWatch.Bind(endpoint);
  19.             // 设置监听队列的长度
  20.             socketWatch.Listen(10);
  21.             //创建负责监听的线程,并传入监听的方法
  22.             Thread watch = new Thread(ConnectionThd);
  23.             watch.IsBackground = true;
  24.             watch.Start();//开启线程
  25.             ShowMsg("启动成功");
  26.             if (flag)
  27.             {            
  28.                 Thread RecMsgthd = new Thread(RecMsg);
  29.                 RecMsgthd.IsBackground = true;
  30.                 RecMsgthd.Start(sokConnection);
  31.             }




  32.         }
  33.         Socket sokConnection;
  34.         /// <summary>
  35.         /// 监听客户端请求的方法
  36.         /// </summary>
  37.         void ConnectionThd()
  38.         {
  39.             while (true)
  40.             {


  41.                 //开始监听客户端请求,注意Accpeet,会阻断当前进程
  42.                 sokConnection = socketWatch.Accept();//一旦监听到客户端请求,就返回和客户端通信的套接字
  43.                 //想列表控件中 添加一个 客户端的IP端口字符串,作为客户端的唯一标识
  44.                 lbOnline.Items.Add(sokConnection.RemoteEndPoint.ToString());
  45.                 //将 与客户端通信的套接字对象sokConnection 添加到 键值对集合中,并以客户端IP端口作为键
  46.                 dict.Add(sokConnection.RemoteEndPoint.ToString(), sokConnection);
  47.                 //Thread thdRec = new Thread(RecMsg);
  48.                 //thdRec.IsBackground = true;
  49.                 //thdRec.Start(sokConnection);
  50.                 flag = true;
  51.                 ShowMsg("客户端连接成功");



  52.             }
  53.         }
  54.         void ShowMsg(string msg)
  55.         {
  56.             txtMsg.AppendText(msg + "\n");
  57.         }
  58.         void RecMsg(object socketClientPara)
  59.         {
  60.             Socket socketClient = socketClientPara as Socket;
  61.             while (true)
  62.             {
  63.                 //第一个接受用的缓存区(2M)
  64.                 byte[] arrMsgRec = new byte[1024 * 1024 * 2];
  65.                 int length = socketClient.Receive(arrMsgRec);
  66.                 string strMsgRec = System.Text.Encoding.UTF8.GetString(arrMsgRec, 0, length);
  67.                 ShowMsg(sokConnection.RemoteEndPoint.ToString() + "发送了数据:" + strMsgRec);
  68.             }
  69.         }

  70.         private void btnSend_Click(object sender, EventArgs e)
  71.         {
  72.             string strMsg = txtSend.Text.Trim();
  73.             byte[] arrMsg = System.Text.Encoding.UTF8.GetBytes(strMsg);
  74.             //获取列表中 选中的key
  75.             string ClientKey = lbOnline.Text;
  76.             //通过key,找到字典集合中对应的 与某客户通信的套接字的send方法,发送数据给对方
  77.             dict[ClientKey].Send(arrMsg);
  78.             //sokConnection.Send(arrMsg);
  79.             ShowMsg("发送了数据" + strMsg);
  80.             


  81.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

1 个回复

倒序浏览
在第8行将bool flag = false改为bool flag = true;试试看!

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马