while (true)
            {
                allDone.Reset();
               
                listener.BeginAccept(
                    new AsyncCallback(AcceptCallback),
                    listener);
              allDone.WaitOne();            }等待客户连接 调用用
listener.EndAccept
后程序才会继续运行

解决方案 »

  1.   

    private void button1_Click(object sender, EventArgs e)
    {
    Thread ListenerThread = new Thread(new ThreadStart(StartListener));
    ListenerThread.Start();
    }// 使用单独线程监听
    private void StartListener()
    {
    string port = this.textBox1.Text;
                byte[] bytes = new Byte[1024];
                IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
                IPAddress ipAddress = ipHostInfo.AddressList[0];
                IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);
                Socket listener = new Socket(AddressFamily.InterNetwork,
                SocketType.Stream, ProtocolType.Tcp);
                listener.Bind(localEndPoint);
                listener.Listen(10);
                while (true)
                {
                    allDone.Reset();
                   
                    listener.BeginAccept(
                        new AsyncCallback(AcceptCallback),
                        listener);
                  allDone.WaitOne();            }
    }private void AcceptCallback(IAsyncResult ia)
    {
    Socket server = (Socket)ia.StateObject;
    Socket client = server.EndAccept(ia);
    allDone.Set();
    // 连接建立,开始发送接收
    }*** 注意 ***
    这里只是一个示例,实际应用中,不要把线程建立放在按钮的事件中!!不然按一次就会建立一个线程。应该把线程的定义放入初始化的构造中,按钮事件只是负责开始或者结束线程。