我正在尝试为我的网络课程创建一个 java 聊天应用程序。截至目前,我一直试图连接到不同路由器后面的人。我现在拥有我的项目的方式是我有一个客户端程序和一个服务器程序。客户端程序首先登录到服务器程序,服务器程序将他们的 IP 和端口记录在数据库中,然后服务器将他们的朋友列表及其 IP 和端口返回给他们。然后客户端关闭与服务器的连接并尝试使用服务器发回的信息连接到另一个客户端。到目前为止,我的程序只能连接到服务器并获取朋友的 IP 和端口,但是当我使用这些值连接到另一个客户端时,我无法连接。
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 打孔,但我不确定它是如何实际完成的或如何实现它。
任何建议,将不胜感激。