如何在两台机器之间建立套接字连接,每台机器都没有out-net ip优先使用java?

时间:2013-05-07 09:50:07

标签: java sockets serversocket

我正在创建一个由服务器和多个客户端组成的软件,我需要两个客户端相互传输文件。

其工作流程如下所述:

  1. 客户端(文件发送者)向服务器发送请求并告诉它我需要将文件发送到另一个客户端(文件接收者)。
  2. 服务器返回文件接收客户端的IP并向文件接收客户端发送消息,并告诉他某人的IP是..将向您发送文件。
  3. 文件发件人创建一个SocketServer并告诉服务器我已经准备好了。
  4. 文件接收器创建连接到文件发送者的套接字连接。
  5. 文件发件人开始发送文件。
  6. 我在第4步遇到了一个问题:因为out-net ip,我无法建立从文件接收器到文件发送者的套接字连接。

    这里,out-net ip意味着这个ip是机器连接的路由器。该机器只有一个由路由器分配的网内IP。

3 个答案:

答案 0 :(得分:1)

前段时间我创建了一个类似的应用程序。如果两个客户端都可以与服务器通信,那么为什么不将服务器用作网桥/网关。我的意思是,服务器将在两个客户端之间发送所有传输文件数据。您不必关闭原始套接字,在步骤1中创建的套接字和在步骤2中创建的套接字使用它们在客户端之间进行传输。这只是一个设计良好的协议的问题,在这种情况下,协议并不难实现。

答案 1 :(得分:0)

您是否已转发路由器上的相应端口?否则你的连接会在路由器上死掉。

答案 2 :(得分:0)

您描述的方式会带来两个问题。

问题1:在真实网络世界中,您可以找到许多配置文件接收器可以直接连接两个文件发送器。您需要配置很多来授予访问权限。

问题2:您使用该设计的代码变得复杂。文件发送者需要实现客户端和服务器套接字。

IMO更好的方式是文件发送方将所需文件传递给管理服务器。如果文件接收者想要文件,他只需从服务器上下载。