我是个初学者,下面是我写的一个简单例子,服务器端的,
private void button1_Click(object sender, EventArgs e)
{
IPHostEntry local = Dns.GetHostByName(Dns.GetHostName());
IPEndPoint iep = new IPEndPoint(local.AddressList[0], 3434);
Socket localSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
localSocket.Bind(iep);
localSocket.Listen(10);
Socket clientSocket;
//while (true)
//{
clientSocket = localSocket.Accept();//程序不是阻塞在这了吗?为什么一运行,窗体上就显示无响应
this.listBox1.Items.Add(((IPEndPoint)(clientSocket.RemoteEndPoint)).Address);
// }
clientSocket.Shutdown(SocketShutdown.Both);
clientSocket.Close();
}
为什么当我点击相应按钮时,窗体就显示无响应。
------解决方案--------------------
accept()方法会阻塞当前主线程,应该创建一个新的线程来负责调用该方法。
------解决方案--------------------
clientSocket = localSocket.Accept()阻塞当前线程,应该在其他线程里面处理,或者在当前线程里面用BeginAccept就不会阻塞了。