我写了一段代码如下:
private void button1_Click(object sender, System.EventArgs e)
{
Socket s = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPAddress ipaddr = IPAddress.Parse("127.0.0.1");
IPEndPoint ipe = new IPEndPoint(ipaddr,8900); s.BeginConnect(ipe,new AsyncCallback(ConnectCallback),s);
connectDone.WaitOne();


} private static void ConnectCallback(IAsyncResult ar)
{
Socket client = (Socket)ar.AsyncState;
if (client.Connected == false)
{

IPAddress ipaddr = IPAddress.Parse("127.0.0.1");
IPEndPoint ipe = new IPEndPoint(ipaddr,8900);
client.BeginConnect(ipe,new AsyncCallback(ConnectCallback),client);

}
else
{
client.EndConnect(ar);
connectDone.Set();
}
}
我这段只是需要连接到服务端就可以了,如果服务器连接不成功就不断的重新连接,这样的代码应该没问题吧。
一. 如果不要client.EndConnect(ar)语句会有什么问题吗?我试过不要这段,也可以正常运行呀。
二. 我觉得如果用connectDone.WaitOne();这条语句就象是成为了阻塞模式一样了,在没有连接到服务器只前连窗体都移动不了了。那如果我需要在这个等待连接的同时也能处理别的事件该怎么办呢。或者说如何将它改成与VC++里异步模式一样的呢。