关于c#的Socket异步网络编程问题
小夏中国 2014-04-14 08:58:54 小弟正在做一个关于socket,tcp异步的网络系统,服务器上的编程是这样的IPAddress ipAddress = IPAddress.Parse("127.0.0.1"); IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 12343); Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); listener.Bind(localEndPoint); listener.Listen(1000);上面是基础,下面是个线程 while (true) { allDone.Reset(); listener.BeginAccept(new AsyncCallback(AcceptCallback), listener); allDone.WaitOne(); }当个有个连接的时候我到AcceptCallback这个回调函数里去设置allDone.set;一般情况下没有问题,但遇到特殊情况的时候还是问题不少的,比如回调函数AcceptCallback里不去设置allDone.set,也就是listener.BeginAccept(new AsyncCallback(AcceptCallback), listener);只启动一次,客户端那边也能异步连接上,不报错,但服务器这边除了第一个客户连接会触发回调函数后面的就不会触发了,说明后面的客户端对于服务器来讲没连接上,但客户端那边确显示连接了,现在我手动在服务器上allDone.set之后,对于服务器来讲后面的客户端都连接不上了,就是不能执行到回调函数了,请问现在服务器是卡在哪个地方了。我通过怎么样的方式可以解决这样的问题! 因为客户端有重连机制,如果二个客户端刚在重启,我服务器断开之后也刚重启,二个或三个客户端会被同一个listener.BeginAccept接收,这样服务器肯定会出问题了 无论我怎么样allDone.set,当客户端连接的时候 不会到达回调函数那了