2013-10-31 63 views
2

我正在爲TCP流尋找可靠的STUN解決方案。我曾嘗試過STUNT(由美國康奈爾大學)和XSTUNT(由臺灣大學)。但他們都顯得老舊無用。用於TCP流的STUN服務器

我想要做的是通過C#在兩個不同網絡中的兩個客戶端之間傳輸文件。請讓我知道如果你有任何的任何解決方案如下:1 和UDP爲基礎的C# 2 - 任何基於TCP的STUN服務器的客戶端/服務器解決方案

回答

4

Stuntman是支持TCP STUN一個STUN服務器。

www.stunprotocol.org

在該網站上有一些鏈接到一些示例代碼,包括C#實現了客戶端庫。大多數都是針對UDP的,但通過修改一個現有的UDP代碼庫,您可以通過修改一個現有的UDP代碼庫來爲TCP STUN指定自己的C#代碼。

之後,您仍然需要實施信號服務以交換候選地址(直接或通過STUN獲得)並執行您自己的類似於ICE的連接檢查。

對於TCP,簡單的解決方案是使兩個端點使用兩個套接字。一個套接字或監聽,另一個連接 - 但都共享相同的本地端口(ala SO_REUSEADDR套接字選項)。

另一種解決方案是讓每個端點只使用一個套接字。兩個端點都反覆嘗試進行TCP同時連接。如果NAT性能很好,可以建立連接。

NAT穿越,特別是TCP NAT穿越,並不是一門精確的科學。總會有兩個端點不能直接連接的情況,它們必須回退到UDP和/或通過諸如TURN之類的中繼解決方案。

將上述所有信息與去年在基本的P2P/NAT遍歷here上編寫的答案合併。