众所周知,socket的Accept会阻塞当前线程。如果子程序,或者类在被回收时,没有正确的中止socket,则会引发一些异常。我说下常用的一些处理方法:
1.强行中断线程。
这种方法我觉得是最差的,因为强行中断正在执行的线程,可能会引发一些意想不到的结果,这是最差的方法。
2.在Socket上调用Pending()方法。
这种做法的原理就是:
a.看Socket是否有连接请求。如果没有,则返回失败
b.失败后调用Sleep方法等待线程,然后再循环到a
我认为,这也不是一种好的办法,相当于人工进行了可控制的等待,Accept本来就有阻塞功能,这样做不是多此一举吗?
3.在.net程序中用异常捕捉法,如下代码所示:
public void init(int nProt = 9988)
{
tlTcpListen = new TcpListener(IPAddress.Parse("127.0.0.1"), nProt);
tlTcpListen.Start();
Thread client = new Thread(new ThreadStart(DoListen));
client.Start();
}
static void DoListen()
{
try
{
//if (!tlTcpListen.Pending())
TcpClient tcpClient = tlTcpList