gpt4 book ai didi

c# - udpclient.close并不总是关闭套接字吗?

转载 作者:行者123 更新时间:2023-12-03 12:07:04 30 4
gpt4 key购买 nike

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

我是怎么发现的?
通过使用进程浏览器(来自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设置接收超时来关闭套接字。

关于c# - udpclient.close并不总是关闭套接字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1165362/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com