我正在嘗試爲我的網絡類創建一個java聊天應用程序。截至目前,我被困在嘗試連接到不同路由器後面的人。我現在有我的項目的方式是我有一個客戶端程序和一個服務器程序。客戶端程序首先登錄到服務器程序中,將其IP和端口記錄在數據庫中,然後服務器將其IP和端口返回給朋友列表。然後,客戶端關閉與服務器的連接,並嘗試使用服務器發回的信息連接到另一個客戶端。到目前爲止,我的程序只能連接到服務器並獲取朋友的IP和端口,但是當我使用這些值連接到另一個客戶端時,我無法連接。Java nat遍歷聊天應用程序
socket = new Socket();
socket.setReuseAddress(true);
socket.setKeepAlive(true);
socket.setSoLinger(true, 10);
socket.bind(new InetSocketAddress(Port));
socket.connect(new InetSocketAddress(host, SERVER_PORT));
reusePort = socket.getLocalPort();
以上是用於連接到服務器的java代碼片段,下面是我在客戶端做的事情。
ss = new ServerSocket(reusePort);
所以,現在在技術上,我聽我用來連接到與被登錄並檢索到另一個客戶端,並與我的IP和端口NAT表服務器的同一端口上。我不知道我錯過了什麼,或者是否有某些協議或我必須做的事情。我已經看過TCP和UDP打孔,但我不確定這是如何實際完成的或如何實現它。
任何建議,將不勝感激。
我看你已經接受一個答案,但似乎你想看看「孔Puching」。接受的答案並不真正回答你的問題,而是告訴你讓你的應用程序的所有信息都通過你的服務器,而且你似乎想直接連接你的客戶端。 – 2014-11-01 10:51:03
嘿你找到你的答案了。請幫幫我。我有同樣的問題。 – 2016-03-08 07:33:53
[STUN,TURN,ICE library for Java]的可能重複(http://stackoverflow.com/questions/2039147/stun-turn-ice-library-for-java) – 2017-04-19 14:04:19