IPAddress ip = IPAddress.Parse(this.txtIP.Text);
            IPEndPoint server = new IPEndPoint(ip, Int32.Parse(this.txtPort.Text));
            socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Bind(server);
            //监听客户端连接
            socket.Listen(10);
            while (true)
            {
                newSocket = socket.Accept();
                //显示客户IP和端口号
           
            this.lbState.Items.Add("与客户 " + newSocket.RemoteEndPoint.ToString() + " 建立连接");
            //创建一个线程接收客户信息
            Control.CheckForIllegalCrossThreadCalls = false;
            thread = new Thread(new ThreadStart(AcceptMessage));
            thread.Start();
            
            }

解决方案 »

  1.   

    看上去,没什么大问题吧。不过,
    Control.CheckForIllegalCrossThreadCalls = false;
    这句,我不确定是不是要用 this.CheckForIllegalCrossThreadCalls 才有效.
    而且,这样做.貌似多线程没有什么意义(我不确定)
    所以我建议
    newSocket = socket.Accept();
    ThreadPool.QueueUserWorkItem(new WaitCallback(AcceptMessage), newSocket);
    }
    ....
    void AcceptMessage(object state){
    Socket clientSocket = state as Socket;
    ...
    }
      

  2.   

    newSocket = socket.Accept();
    因为是同步的,线程会阻塞在这句话这,接收连接请求的部分应该新起一个线程写
      

  3.   

    this.lbState.Items.Add("与客户 " + newSocket.RemoteEndPoint.ToString() + " 建立连接");这句显示不了,因为它并不一定这个时候就连接上了!
      

  4.   

    Control.CheckForIllegalCrossThreadCalls = false;这句话怎么能放在for循环里呢?
    放在外面