private void button1_Click(object sender, EventArgs e)
        {//开始监听            
            IPAddress ip = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];
            IPEndPoint end = new IPEndPoint(ip, 888);
            
            socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Bind(end);
            socket.Listen(10);
            richTextBox1.Text = ip + ":888 正等待客户端的连接...";
            clientSocket = socket.Accept();
            richTextBox1.Text += "\n已与客户端" + clientSocket.RemoteEndPoint.ToString() + "建立连接";
            thread = new Thread(new ThreadStart(AA));
            thread.Start();
        }
        private void AA()
        {
            NetworkStream ns = new NetworkStream(clientSocket);
            while (true)
            {
                byte[] bb = new byte[1024];
                try
                {
                    ns.Read(bb, 0, bb.Length);
                    richTextBox1.Text += "\n" + Encoding.Unicode.GetString(bb);
                }                
                catch
                {
                    richTextBox1.Text += "\n与客户端已断开连接!";
                    break;
                }
         }
这个也属于多线程吧?想做个多个客户端同时向服务器发数据的,谢谢

解决方案 »

  1.   

    你没有轮询已连接的客户端,而只是在和第一个通信,维护一个客户端列表,轮询用select去选择有效信息
      

  2.   

    select貌似sql语句,与里面何干啊?
      

  3.   

    首先
    richTextBox1.Text += "\n" + Encoding.Unicode.GetString(bb);
    这行代码是绝对错误的,跨线程操作UI了
      

  4.   

    I/O复用可以解决这个问题。我的资源下载里有相应的代码,你可以免费获取。
    即select语句的使用。
      

  5.   


    如何操作,thread=new Thread(new ThreadStart());thread.Start()只表示一个线程吗?