如何让UdpClient对DNS更新做出反应

时间:2009-04-28 13:10:05

标签: .net dns udpclient

我正在使用UdpClient将数据包发送到服务器。我正在使用(hostname,port)构造函数构建我的Sender对象时初始化UdpClient。以这种方式构造时,UdpClient将主机名解析为IP地址。对UdpClient对象的后续调用使用IP地址。

不幸的是,如果使用的DNS别名通过DNS系统更新为指向不同的IP地址,则除非重新创建,否则此更改不会反映在我的Sender对象中。

让我的Sender对象及时对DNS更改做出反应的最佳方法是什么?表现非常重要。我可以想到几个解决方案:

  1. 在每次调用时执行DNS解析(即使用接受hostname参数的Send overload)。由于Windows DNS缓存,这实际上可能非常快,我不知道。
  2. 在计时器线程上运行某种DNS检查程序,以定期检查DNS别名是否解析为其他IP。如果是,它会以某种方式更新UdpClient以使用新的IP地址。但是,我真的不想在每次调用时锁定UdpClient对象 - 正如我所说,性能很重要。
  3. 有人有这方面的经验吗?

1 个答案:

答案 0 :(得分:2)

我会将地址解析与UdpClient分开。

  1. Dns课程用于resolve IPaddress(并存储在本地变量中)
  2. 使用UdpClient
  3. 的无参数构造函数
  4. 请勿在{{1​​}}
  5. 上进行连接
  6. 使用带有UdpClient参数的显式Send
  7. 在后台主题:

    1. 每隔X秒检查更新的DNS
    2. 将您传递的本地IPEndPoint变量替换为IPEndPoint来电。
    3. 每次执行此操作时都无需销毁UdpClient.Send。 此外,更新UdpClient时无需锁定。更糟糕的情况是你有一个脏发送到旧地址,但由于你没有立即通知更新,你仍然会有脏发送。