我有一個需要在同一端口上傳輸和接收的應用程序。這可能發生在兩種情況下:.net中的雙向/環回UDP
PC正在與一個遠程硬件進行通信的地方。它「回覆發件人」,所以數據報通過發送端口回到我的電腦。
PC正在自測(回送模式)進行測試和演示(測試應用程序通過UDP向我們的主應用程序提供假數據)的地方。
這似乎只在嘗試實現環回時失敗。唯一能讓它工作的方法是確保接收器是首先設置的 - 這是我無法保證的。
任何人都可以通過建議一個「正確」的方式來實現UdpClient(s)來可靠地處理上述情況,以幫助縮小我的搜索範圍嗎?我發現可以與遠程硬件一起可靠地工作的唯一解決方案是以雙向方式使用單個UdpClient,儘管我正在使用可能影響該發現的遺留代碼。使用兩個UdpClients,但他們踩在其他每個腳趾 - 在某些情況下,一旦一個客戶端啓動,另一個客戶端無法連接。設置ExclusiveAddressUse/ReuseAddress允許端口共享,我幾乎可以得到它的工作,除了具有接收器首先啓動)
編輯
要闡述:
我們通過UDP與外部硬件進行通信。當它收到我們的通訊時,它會回覆源地址 - 所以我們會收到同一端口上的消息。這部分工作正常。但是,如果我嘗試使用環回模擬外部硬件(即,通過「自己」發送和接收相同的端口),我只能接收數據報,如果我開始接收數據報之後纔開始傳輸。這工作正常 - 但如果我傳輸,然後嘗試接收,我從來沒有收到任何數據。在這種情況下,我實際發送的內容是無關緊要的。
所以,我有兩個問題:
1)如何管理環回功能,可靠地工作。
2)如何做(1)不破壞目前工作正常的外部通信!
由於我已經嘗試了1或2個UdpClients的各種組合以及多種不同的設置(無效),我只是想知道是否有人設法使UPD環回工作正常,因爲這可能會給我這導致了我可以在所有情況下都能工作的解決方案。
感謝您花時間思考這個問題...
您能否澄清一下:硬件或測試應用程序是否向您的應用程序發送了UDP數據包,並將響應發回給您?或者你的應用程序發送數據包到硬件或測試應用程序,這些發送迴應?你可以編輯你的問題,並展示各方之間的典型數據交換? – 2010-05-20 11:45:21
正如邁克斯科特所建議,請澄清更多,以便您可以得到確切的答案。 – 2010-05-24 11:34:18