想要快速的传送一个大文件,服务器和客户端像往常那样单连接发送数据包时效性太低,所以我们需要一种新的手段来发送文件。我们现在说一下服务器给客户端快速发送大文件。
主要思想:服务器端指定要发送的文件,获取文件的大小,并根据大小决定创建多少个线程来发送文件。当检测到有客户端连接的话,发送第一个数据包,主要包含的数据有文件的名称(便于在客户端备份同名文件,考虑到文件类型),因为服务器端要多线程进行发送,客户端应该开同样多的线程进行接收,所以第一个数据包还得含有线程数量。然后就是服务器端开线程发送数据,客户端创建文件,开线程接收数据。并写数据到文件中。
具体做法:服务器端将第一个包发送完成后,关掉客户端套接字,客户端在线程中再创建连接到服务器,服务器那边检测到连接直接开始发送数据。服务器的数据包要包含这个线程发送的数据总长度是多大,线程负责的数据开始位置在那块(cur),服务器每次发送的数据长度是多少(move_distance)(这提示客户端每次接受到数据包,写文件时,应该从哪里开始写,并且到哪该结束写)。客户端收到后,直接使用readn读取服务器的数据,pwrite负责从线程负责的开始位置cur到线程结束的位置cur+moved
实现总结:写程序需要更加细心,暂时没有想到客户端向服务器快速的发送大文件的方法,实在SA疼!
源程序: git@github.com:Request2609/ThreadFile.git