1

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

其工作流程描述如下:

  1. 客户端(文件发送者)向服务器发送请求并告诉它我需要向另一个客户端(文件接收者)发送文件。
  2. 服务器返回文件接收客户端的 ip 并向文件接收客户端发送消息,并告诉他 ip 为 .. 的人将向您发送文件。
  3. 文件发送者创建一个 SocketServer 并告诉服务器我已经准备好了。
  4. 文件接收器创建一个连接到文件发送器的套接字连接。
  5. 文件发送者开始发送文件。

我在第 4 步遇到了问题:由于外网 ip,我无法建立从文件接收器到文件发送器的套接字连接。

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

4

3 回答 3

1

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

于 2013-05-07T18:51:45.803 回答
0

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

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

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

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

于 2013-05-07T12:09:27.963 回答
0

您是否在路由器上转发了相应的端口?否则你的连接会在路由器上消失。

于 2013-05-07T10:12:48.633 回答