我正在尝试为我的网络类创建一个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();
Run Code Online (Sandbox Code Playgroud)
上面是一段用于连接服务器的java代码,下面是我在客户端做的事情.
ss = new ServerSocket(reusePort);
Run Code Online (Sandbox Code Playgroud)
所以现在技术上我正在侦听我用来连接到登录的服务器的同一个端口,并且可以检索到另一个客户端,并且在我的ip和端口的NAT表中.我不确定我缺少什么,或者是否有某些协议或我需要做的事情.我已经看过TCP和UDP打孔但我不确定它是如何实现的或如何实现它.
任何建议,将不胜感激.