日期:2014-05-20  浏览次数:20696 次

关于socket类的问题
我是个初学者,下面是我写的一个简单例子,服务器端的, 
 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就不会阻塞了。