【问题标题】:UDP - "ConnectAndSend vs SendTo"UDP - “ConnectAndSend 与 SendTo”
【发布时间】:2021-02-01 22:59:59
【问题描述】:

我正在为一个简单的 C# 库编写代码,该库负责管理客户端/服务器架构中的 UDP 通信。
我的通信基于 C#System.Net.Sockets.UdpClient 类,用于服务器端和客户端;对于客户端的发送功能,我看到有两种可能的选择:

  1. Connect(IPEndPoint endPoint) 执行一次调用以指定目标端点,然后对Send(byte[] dgram, int bytes) 执行后续调用,因此无需指定目标端点
  2. 总是调用Send(byte[] dgram, int bytes, IPEndPoint endPoint),因此指定目标端点

关于第一个选项,如果需要不同的目标端点,只需重新调用Connect

我查看了 MSDN,但仍有几个问题没有得到解答:

  • 在一个选项和另一个选项之间进行选择有什么好处吗?从技术上讲,第一个选项在我看来更加清晰明了,但第二个选项会给您带来好处“如果您调用 Connect 方法, 任何来自指定默认地址以外的地址的数据报都将被丢弃”
  • 特别是,有什么性能方面的原因可以选择它们吗?再一次,在我看来,第一个更优化。
  • 为什么要提供两种不同的方法来实现几乎相同的功能(如果不完全相同)?

【问题讨论】:

  • 选项 1 是广播 UDP 消息。所以在网上搜索广播消息。您的应用程序是一个双端口应用程序,因为您在一个连接中接收并发送到另一个连接。第二种方法不是广播,只是一对一。
  • @jdweng 请考虑该设置,例如 XXX.XXX.XXX.255 即使使用选项#2 我也可以广播;所以我会说区别不是基于广播能力
  • IP 255 可以是子网的广播 IP,具体取决于实现的协议。

标签: c# udp udpclient


【解决方案1】:

我能够找到的两种方法之间的细微差别是:

  1. Connect(IPEndPoint endPoint)Send(byte[] dgram, int bytes) 限制客户端仅将数据发送到它所连接的端点,并暗示任何从指定默认地址以外的地址到达的数据报都将被丢弃

  2. Send(byte[] dgram, int bytes, IPEndPoint endPoint) 允许在每次调用时将数据发送到不同的端点,而无需重新连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-27
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 2011-04-25
    • 1970-01-01
    相关资源
    最近更新 更多