我想在一些計算機之間建立點對點連接,因此用戶可以在沒有外部服務器的情況下聊天和交換文件。我的第一個想法是如下:Java:服務器/客戶端 - >客戶端/客戶端
我做一箇中央的ServerSocket的服務器,所有應用程序都可以連接到。此ServerSocket跟蹤連接的套接字(客戶端),並將新連接的客戶端的IP和端口提供給所有其他客戶端。 每個客戶端都會創建一個新的ServerSocket,所有客戶端都可以連接到該客戶端。
換句話說:每個客戶端有連接的所有其他客戶端一個ServerSocket。消息應該通過圖像中的藍線。
我只運行一個小問題:如果我通過所有不同的IP地址測試它,它工作正常,但是當兩個客戶端具有相同的(外部)IP地址時,它不再工作。有人知道這個聰明的解決方案嗎?
謝謝!馬克
我的回答不是真的,所以我添加了兩種可能的解決方法。 – Philipp
即使沒有端口轉發,也是可能的。 Skype做到了。當我第一次讀到他們如何做時,我幾乎不能相信它真實的作品。如果我沒有記錯,您需要一臺服務器來建立連接並交換IP地址。通常,任何一方的NAT都會讓流量通過屬於此NAT的客戶端實例化的連接。困難的部分是讓兩個NAT都認爲相應的客戶端啓動了連接。我相信這是在這裏描述:http://www1.cs.columbia.edu/~library/TR-repository/reports/reports-2004/cucs-039-04.pdf – Axel
爲了驅動自己的NAT的端口映射:http ://en.wikipedia.org/wiki/Universal_Plug_and_Play#NAT_traversal – Aubin