通过TCP连接异步发送文件

时间:2013-05-17 03:57:15

标签: ios networking asynchronous tcp large-files

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

所以我所拥有的是一部充当服务器的手机,然后一堆手机作为客户端连接到手机。基本上它是一个游戏/音乐分享者。

真的很难深入了解它的语义,但这并不重要。

重要的是服务器和客户端通过TCP连接快速重复发送彼此的命令和位置,有时客户端希望向服务器发送音乐文件(通常为4MB)作为音乐播放。

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

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

但问题是套接字连接需要1-2秒的延迟,而且我知道可能会发生中间人攻击。

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

1 个答案:

答案 0 :(得分:0)

我不会把你的解决方案称为天真,这主要是FTP的工作原理,在我看来,分离数据和控制路径是一个很好的设计模式。

我不担心中间人。如果您愿意,可以向客户端添加一个命令,通过服务器提供的密钥对数据连接进行响应,这样您就可以在不使用ip寻址的情况下关联连接。

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

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

你可能也应该为每个套接字使用不同的线程,但我怀疑你是这样做的,因为如果没有它,它将无法正常工作。