C# udpclient.close不';不要总是关上插座?

C# udpclient.close不';不要总是关上插座?,c#,sockets,C#,Sockets,我正在使用下面的代码,似乎有时套接字没有释放 我是怎么发现的? 通过使用process explorer(来自sysinternal), 申请手续 然后进入TCP/IP选项卡 我可以通过在控制台中键入“netstat-a”看到正在使用的端口 我的问题是,过了一段时间(比如5周),应用程序使用了大约40个端口,而它应该是零 有人知道为什么会这样吗 public void Connect() { try { // Resolve server

我正在使用下面的代码,似乎有时套接字没有释放

我是怎么发现的? 通过使用process explorer(来自sysinternal), 申请手续 然后进入TCP/IP选项卡

我可以通过在控制台中键入“netstat-a”看到正在使用的端口

我的问题是,过了一段时间(比如5周),应用程序使用了大约40个端口,而它应该是零

有人知道为什么会这样吗

    public void Connect()
    {
        try {
            // Resolve server address
            IPHostEntry hostadd = Dns.GetHostEntry(TimeServer);
            IPEndPoint EPhost = new IPEndPoint(hostadd.AddressList[0], 123);

            //Connect the time server
            UdpClient TimeSocket = new UdpClient();
            TimeSocket.Connect(EPhost);

            TimeSocket.Send(SNTPData, SNTPData.Length);
            SNTPData = TimeSocket.Receive(ref EPhost);                
            TimeSocket.Close();
            if (!IsResponseValid())
            {
                throw new Exception("Invalid response from " + TimeServer);
            }

        } catch(SocketException e)
          {
            throw new Exception(e.Message);
          }

    }

您将永远阻止:

SNTPData = TimeSocket.Receive(ref EPhost);  
如果套接字从未接收到数据包,它将坐在那里等待,直到进程结束


您需要在另一个线程上调用TimeSocket.close(),或者使用SetSocketOption设置接收超时来关闭套接字。

您将永远阻止:

SNTPData = TimeSocket.Receive(ref EPhost);  
如果套接字从未接收到数据包,它将坐在那里等待,直到进程结束


您需要在另一个线程上调用TimeSocket.close()或使用SetSocketOption设置接收超时来关闭套接字。

如果答案正确,请投赞成票!;)如果答案正确,请投赞成票!;)