server->client版多线程发送大文件的实现

为解决单连接发送大文件时效性低的问题,介绍服务器给客户端快速发送大文件的方法。主要思想是服务器根据文件大小决定线程数,发送含文件名、线程数的首包,之后多线程发送数据,客户端开同样多线程接收并写数据到文件。还说明了具体做法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想要快速的传送一个大文件,服务器和客户端像往常那样单连接发送数据包时效性太低,所以我们需要一种新的手段来发送文件。我们现在说一下服务器给客户端快速发送大文件。

主要思想:服务器端指定要发送的文件,获取文件的大小,并根据大小决定创建多少个线程来发送文件。当检测到有客户端连接的话,发送第一个数据包,主要包含的数据有文件的名称(便于在客户端备份同名文件,考虑到文件类型),因为服务器端要多线程进行发送,客户端应该开同样多的线程进行接收,所以第一个数据包还得含有线程数量。然后就是服务器端开线程发送数据,客户端创建文件,开线程接收数据。并写数据到文件中。

具体做法:服务器端将第一个包发送完成后,关掉客户端套接字,客户端在线程中再创建连接到服务器,服务器那边检测到连接直接开始发送数据。服务器的数据包要包含这个线程发送的数据总长度是多大,线程负责的数据开始位置在那块(cur),服务器每次发送的数据长度是多少(move_distance)(这提示客户端每次接受到数据包,写文件时,应该从哪里开始写,并且到哪该结束写)。客户端收到后,直接使用readn读取服务器的数据,pwrite负责从线程负责的开始位置cur到线程结束的位置cur+moved

实现总结:写程序需要更加细心,暂时没有想到客户端向服务器快速的发送大文件的方法,实在SA疼!

源程序: git@github.com:Request2609/ThreadFile.git
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值