C# socket超时释放端口

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# socket超时释放端口相关的知识,希望对你有一定的参考价值。

C# winform socket编程,我做了一个Server端程式,来接收客户端的连接,如下图。

如何实现Server端Socket在打开后一定时间内,比如说50秒没有客户端连接,Socket就自动释放。如果不释放的话,这个程式就一直在跑,没法关闭。

参考技术A

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();

追问

我那个程式,执行到this.acceptedSocket = this.socket.Accept();就死掉了(在等客户端的连接请求,),根本就不会执行Proccess(),在Proccess()中增加计时就无从谈起了啊。求详细点的代码,我是菜鸟啊!

参考技术B

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

    Environment.Exit(Environment.ExitCode);

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

    Process.GetCurrentProcess().Kill();

    Application.ExitTread();

希望对你有用,goodlucky

参考技术C 使用BeginAccept避免阻塞,然后开个线程判断超时。
或者使用Select模式避免阻塞,然后开个线程判断超时。追问

能不能详细点啊,BeginAccept这么使用?开线程判断超时如何开啊?

flashfxp 数据socket错误 连接已超时 filezilla

最近windows server 开启了防火墙后发现flashfxp连不上,报超时。

1,服务端的动态端口从指定的范围内取,

2,防火墙开启范围内端口。

 

 

参考:http://jingyan.baidu.com/article/046a7b3ed60b30f9c27fa930.html

 

以上是关于C# socket超时释放端口的主要内容,如果未能解决你的问题,请参考以下文章

appium--自动检测端口和释放端口

使用boost库,无法释放udp端口的问题

C# udpclint 端口如何释放?

tcp服务端socket

Appium+Python3 端口自动检测和释放

关于QSocket的释放的一个需要注意的情况(必须先断开连接)