Java 如何避免必须设置端口转发

Java 如何避免必须设置端口转发,java,sockets,portforwarding,Java,Sockets,Portforwarding,我正在用Java编程一个胖客户端,它允许发送文件。 因此,从具有公共IP的LAN 1(称为pip1),具有本地IP(lip1)的第一个fat客户端(fc1)通过WAN向LAN 2(pip2)上的第二个fat客户端(fc2)发送文件。 我在端口8081上使用TCP/IP协议。因此,只有当我将LAN1路由器上lip1的端口8081和LAN2路由器上lip2的端口8081进行端口转发时,它才能工作 这很糟糕:我想你已经明白我不擅长网络方面的东西了s 你有什么建议?我使用 java .net。ServO

我正在用Java编程一个胖客户端,它允许发送文件。 因此,从具有公共IP的LAN 1(称为pip1),具有本地IP(lip1)的第一个fat客户端(fc1)通过WAN向LAN 2(pip2)上的第二个fat客户端(fc2)发送文件。 我在端口8081上使用TCP/IP协议。因此,只有当我将LAN1路由器上lip1的端口8081和LAN2路由器上lip2的端口8081进行端口转发时,它才能工作

这很糟糕:我想你已经明白我不擅长网络方面的东西了s
你有什么建议?我使用<强> java .net。ServOrackE<强>

也许我需要在传输中间有一个真正的服务器。每个胖客户端在启动时创建第二个线程,并连接到此服务器。等待服务器响应的阻塞连接。没有超时。只有当服务器从另一个fat客户端接收到发送文件的请求时,服务器才会响应(使用文件的数据)。
丑陋的但是,我错了吗?
嗯,我想我对这个话题研究得不够s我在这里找到了很多想法:

  • 它完全是关于NAT-T的,有UPnP、ICE、PMP或PCP等协议


  • 还有很多其他的关键词是“P2P,JAVA,NAT”。感谢你让我踏上赛道

客户端无法向其他客户端发送数据。某个地方必须有一台服务器。如果该服务器位于NAT设备后面,则必须进行端口转发。这不是编程问题,而是网络设置问题。是的,我将我的应用程序命名为胖客户端,因为它安装在每个用户的环境中。但在它内部,有一个真正的客户端部分使用套接字发送数据,还有一个服务器部分在另一个线程中启动,等待服务器套接字传入数据。事实上,当你在计算机上安装软件时,它不能等待外部数据吗?