c# - 何时关闭 UDP 套接字

标签 c# sockets udp

我有一个使用 UDP 套接字发送数据的客户端-服务器应用程序,数据只需要从客户端传输到服务器,并且服务器将始终具有相同的 IP。唯一的要求是我必须每秒发送大约 10 条消息

目前我是按照以下方式做的:

public void SendData(byte[] packet)
{
    IPEndPoint end_point = new IPEndPoint(serverIP, serverPort);
    UdpClient udpChannel = new UdpClient(sourcePort);
    udpChannel.Connect(end_point);
    udpChannel.Send(packet, packet.Length);
    udpChannel.Close();
}

我遇到的问题是,当我使用命令“udpChannel.Close()”时,在服务器未监听时需要 2-3 秒才能执行。 (我在 What is the drawback if I do not invoke the UdpClient.Close() method? 中看到了同样的问题)

我的问题是,如果我总是向相同的 IP 地址和端口发送数据包,是否有必要在每次发送请求后连接套接字并关闭它?

我打算使用的代码如下:

UdpClient udpChannel;

public void SendData(byte[] packet)
{
    udpChannel.Send(packet, packet.Length);
}

public void Initialize(IPAddress IP, int port)
{
    IPEndPoint end_point = new IPEndPoint(serverIP, serverPort);
    UdpClient udpChannel = new UdpClient(sourcePort);
    udpChannel.Connect(end_point);
}

public void Exit()
{
    udpChannel.Close();
}

这样做,在发送数据之前是否有必要在“SendData”方法中做一些检查? 上面的代码有没有问题?

谢谢!

最佳答案

UDP 是无连接的,调用 udpChannel.Connect 只是指定一个默认主机端点以与 Send 方法一起使用。您不需要在发送之间关闭客户端,保持打开状态不会留下任何连接或在发送之间运行的监听器。

关于c# - 何时关闭 UDP 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19819927/

相关文章:

c++ - 为 UDP 服务器响应重用 sock_fd 与新 sock_fd

c# - 如何在 LINQ 中使用表字段创建新的 DateTime where 条件

c# - C#中通过枚举属性调用方法

c# - 向 EditorFor 添加一个类 - razor c#

c - TCP 套接字 : When ntoh/hton conversion not needed?

javascript - JS Websocket 停留在连接到 TCPListener 的状态 - VB.net

c# - 从订阅者取消订阅 .NET 事件

c++ - 试图通过套接字接收文件

Android 最有效的加密/解密连续 UDP(语音数据包)数据的方法

iphone - 在 iPhone 上发送 UDP 数据包在新的 3G 连接上失败,但在其他情况下有效