我試圖建立一個P2P即時消息系統,雖然我還沒有遇到這個問題,但我希望如果客戶端在本地局域網的NAT後面,我會遇到一些問題(閱讀:每個人。)通過NAT的P2P即時消息
讓我解釋一下算法,你會明白我的意思。有三個組件:一個服務器和兩個客戶端 - 客戶端Alice希望與客戶端Bob發起聊天。服務器只跟蹤誰在線,但實際的對話不通過服務器(爲了客戶端的隱私)
因此,Alice和Bob都登錄到服務器 - 連接到服務器的靜態偵聽從一個短暫的港口。他們告訴服務器他們正在偵聽傳入聊天請求的靜態端口。 Alice詢問服務器如何聯繫Bob。服務器響應ipaddress和偵聽端口等。 Alice將該請求發送給該IP地址和端口上的Bob以建立連接。希望這是有道理的。
如果Bob在NAT後面,那麼他確定他可以與服務器通話,因爲他是開始通信的人。但是愛麗絲的要求不會讓他接近他,因爲尚未針對他在愛麗絲的IP地址上收聽聊天請求的端口設置NAT關係。
有人知道做這種工作的某種黑魔法?這會不會成爲問題?發展還沒有那麼久,我還沒有真正遇到這個問題。
爲了說明這一點,我不想讓最終用戶爲其監聽端口配置端口轉發。
對於前面提到的黑魔法,客戶端和服務器都在Java中,但我只是一般的算法後(如果它甚至有可能)
只要看看聊天系統,如jabber甚至Skype。您必須配置端口轉發,使用代理服務器或通常打開的後備端口,如80 ... – Fildor