通过TCP连接异步发送文件



我正在制作一个iOS应用,但这更像是一个一般的网络问题。

所以我有一个电话作为服务器,然后一堆电话连接到电话作为客户端。它基本上是一个游戏/音乐共享器。

要真正了解它的语义有点困难,但这并不重要。

重要的是,服务器和客户端在TCP连接上反复发送彼此的命令和位置,有时客户端想向服务器发送一个音乐文件(通常为4MB)作为音乐播放。

我最初遇到的问题是,当发送大文件时,它会挂起从客户端向服务器发送命令。

我天真的解决方案是创建另一个套接字连接到服务器发送文件到服务器,服务器将检查新套接字的IP,如果它有一个现有连接的IP,那么它将把它绑定到那个连接,接收文件,然后断开套接字。

但这样做的问题是,它需要1-2秒的延迟套接字连接,我知道有中间人攻击可能发生。

这个问题有没有更优雅的解决方案?

我不会说你的解决方案幼稚,这在很大程度上是FTP的工作方式,在我看来,分离数据和控制路径是一个很好的设计模式。

我才不担心有人夹在中间。如果您愿意,您可以向客户端添加一个命令,通过服务器提供的秘密数据连接响应该命令,这将允许您在不使用ip地址的情况下关联连接。

如果延迟是一个问题,那么为什么不在一开始就建立两个连接呢?操作系统上几个tcp连接的开销通常并不大。

您还可以对命令和数据使用这两个连接,在它们之间交替使用。由于服务器和客户机都知道连接何时繁忙,因此它们可以选择使用空闲的连接。这样做的好处是,它将使两个连接都处于繁忙状态,以确保它们都处于工作状态。

您可能还应该为每个套接字使用不同的线程,但我怀疑您这样做是因为没有它就无法很好地工作。

最新更新