2009-04-28 33 views
0

我正在使用UdpClient向服務器發送數據包。我使用(hostname,port)構造函數構建我的發件人對象時初始化UdpClient。當以這種方式構建時,UdpClient將主機名解析爲IP地址。隨後對UdpClient對象的調用使用IP地址。如何讓UdpClient對DNS更新做出反應

不幸的是,如果所使用的DNS別名是通過DNS系統更新指向不同的IP地址,這種變化不會反映在我的發件人對象,除非它是重新創建。

什麼是有我的發件人對象及時DNS變化作出反應的最好方法?性能非常重要。我可以想到幾種解決方案:

  1. 在每次調用時都進行DNS解析(即使用接受主機名參數的發送過載)。這可能實際上是相當快的,因爲Windows DNS緩存,我不知道。
  2. 在定時器線程上運行某種DNS檢查程序以定期檢查DNS別名是否解析爲不同的IP。如果是這樣,它會以某種方式更新UdpClient以使用新的IP地址。但是,我並不想在每次調用時都鎖定UdpClient對象,正如我所說的,性能非常重要。

任何人都有這樣的經驗嗎?

回答

2

我會獨立於UdpClient地址解析。

  1. 使用DnsresolveIPaddress(和局部變量店)
  2. 使用的UdpClient參數的構造函數,
  3. 不要做與IPEndPointUdpClient
  4. 使用顯式Send一個連接參數。

在後臺線程:

  1. 檢查更新的DNS
  2. 每X秒替換本地IPEndPoint變量傳遞給你的UdpClient.Send電話。

每次你這樣做,沒有必要破壞你的UdpClient。 另外,更新IPEndPoint時無需鎖定。最糟糕的情況是,你有一個髒寄送到舊地址,但由於你沒有立即通知更新,你將有骯髒的發送。

相關問題