C# socket超时释放端口

2024-11-09 10:29:54
推荐回答(3个)
回答(1):

1)在线程函数Process中增加一个计时,如下面代码

void Process( )
{
    //线程启动时,记录进入线程的时间
    DateTime t0 = DateTime.Now;
       
    //线程循环
    while(true)
    {
        //……
        
        if( 接收到客户端的数据)
        {
            t0 = DateTime.Now;
            //接收数据处理(代码略)
        }   
      
        //判断是否超过50秒
        if((DateTime.Now - t0).TotalSeconds>50)
        {
           // 在此关闭连接(代码略)
           
           //退出线程
           return;
        }
    }
}

2)最好将接收线程设置为后台线程

Thread thread = new Thread(new ThreadStart(this.Process));
//将接收处理线程设置为后台运行
thread.IsBackground = true;
thread.Start();

回答(2):

这里我给你提供多种超时结束线程的代码,你设置一个计时器,到时执行如下代码即可kill线程:

  1. Environment.Exit(Environment.ExitCode);

  2. Stsyem.Treading.Tread.CurrentTread.Abort();

  3. Process.GetCurrentProcess().Kill();

  4. Application.ExitTread();

希望对你有用,goodlucky

回答(3):

使用BeginAccept避免阻塞,然后开个线程判断超时。
或者使用Select模式避免阻塞,然后开个线程判断超时。