while (true)
{
allDone.Reset();
listener.BeginAccept(
new AsyncCallback(AcceptCallback),
listener);
allDone.WaitOne(); }等待客户连接 调用用
listener.EndAccept
后程序才会继续运行
{
allDone.Reset();
listener.BeginAccept(
new AsyncCallback(AcceptCallback),
listener);
allDone.WaitOne(); }等待客户连接 调用用
listener.EndAccept
后程序才会继续运行
{
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();
// 连接建立,开始发送接收
}*** 注意 ***
这里只是一个示例,实际应用中,不要把线程建立放在按钮的事件中!!不然按一次就会建立一个线程。应该把线程的定义放入初始化的构造中,按钮事件只是负责开始或者结束线程。