最近在写异步TCP程序,在调试时遇到了Client关闭后程序在接收回调里死循环,用client.Connected 检测好像也没用,在网上找到几篇用Socekt检测的文章,都还可以达到Client强行关闭后程序在退出死循环的功能。
本人这个是在原有的程序上加了一个小小的判断条件就实现了,相比起来也是比较简单的,其主要代码如下:
private void AcceptConnect()
{
IPAddress[] ip = Dns.GetHostAddresses(Dns.GetHostName());
listener = new TcpListener(ip[0], 60000);
listener.Start();
while (isExit ==false)
{
try
{
allDone.Reset();
AsyncCallback callback = new AsyncCallback(AcceptTcpClientCallback);
Console.Write("开始等待客户接入 /n/r");
listener.BeginAcceptTcpClient(callback, listener);
allDone.WaitOne();
}
catch (Exception err)
{
Console.Write(err.ToString());
break;