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