UDP-"ConnectAndSend vs SendTo"
UDP - "ConnectAndSend vs SendTo"
我正在为一个简单的 C# 库编写代码,负责在 client/server 架构中管理 UDP 通信。
我的通信基于 C# System.Net.Sockets.UdpClient
class,包括服务器端和客户端;对于客户端的发送功能,我看到有两种可能的选择:
- 对
Connect(IPEndPoint endPoint)
执行一次调用以指定目标端点,然后对 Send(byte[] dgram, int bytes)
执行后续调用,因此无需指定目标端点
- 始终执行对
Send(byte[] dgram, int bytes, IPEndPoint endPoint)
的调用,因此指定目标端点
关于第一个选项,如果需要不同的目标端点,只需重新调用 Connect
。
我查看了 MSDN,但仍有几个问题没有得到解答:
- 选择一个选项和另一个选项有什么优势吗?从技术上讲,第一个选项在我看来更清晰明了,但第二个选项给了你这个好处"If you call the Connect method, any datagrams that arrive from an address other than the specified default will be discarded"
- 特别是,是否有任何性能原因可以选择它们?再次,第一个在我看来更优化。
- 为什么要提供两种不同的方式来实现几乎相同的功能(如果不完全相同)?
我发现的两种方法之间的细微差别是:
Connect(IPEndPoint endPoint)
和 Send(byte[] dgram, int bytes)
限制客户端仅将数据发送到它所连接的端点,并暗示 从某个地址到达的任何数据报指定默认值以外的其他将被丢弃。
Send(byte[] dgram, int bytes, IPEndPoint endPoint)
允许在每次调用时将数据发送到不同的端点,而无需执行重新连接。
我正在为一个简单的 C# 库编写代码,负责在 client/server 架构中管理 UDP 通信。
我的通信基于 C# System.Net.Sockets.UdpClient
class,包括服务器端和客户端;对于客户端的发送功能,我看到有两种可能的选择:
- 对
Connect(IPEndPoint endPoint)
执行一次调用以指定目标端点,然后对Send(byte[] dgram, int bytes)
执行后续调用,因此无需指定目标端点 - 始终执行对
Send(byte[] dgram, int bytes, IPEndPoint endPoint)
的调用,因此指定目标端点
关于第一个选项,如果需要不同的目标端点,只需重新调用 Connect
。
我查看了 MSDN,但仍有几个问题没有得到解答:
- 选择一个选项和另一个选项有什么优势吗?从技术上讲,第一个选项在我看来更清晰明了,但第二个选项给了你这个好处"If you call the Connect method, any datagrams that arrive from an address other than the specified default will be discarded"
- 特别是,是否有任何性能原因可以选择它们?再次,第一个在我看来更优化。
- 为什么要提供两种不同的方式来实现几乎相同的功能(如果不完全相同)?
我发现的两种方法之间的细微差别是:
Connect(IPEndPoint endPoint)
和Send(byte[] dgram, int bytes)
限制客户端仅将数据发送到它所连接的端点,并暗示 从某个地址到达的任何数据报指定默认值以外的其他将被丢弃。Send(byte[] dgram, int bytes, IPEndPoint endPoint)
允许在每次调用时将数据发送到不同的端点,而无需执行重新连接。