永发信息网

socket 一对多文件传输想问下怎么解决

答案:2  悬赏:0  手机版
解决时间 2021-01-03 10:26
socket 一对多文件传输想问下怎么解决
最佳答案
服务器端(发送文件):首先打开文件【fopen】,用rb方式打开,既可以发送文本文件,也可以发送二进制文件,在无错时初始化套接字socket,即初始化socket库【WSAStartup】,分配socket【socket】,填充服务器的地址,即填充sockaddr_in结构,然后进行绑定【bind】,设置套接字为监听套接字【listen】,接收连接【accept】,至此服务器阻塞,等待客户端的连接。
客户端(接收文件):首先打开文件【fopen】,用wb方式打开,在无错时初始化套接字socket,即初始化socket库【WSAStartup】,分配socket【socket】,填充客户端的地址,即填充sockaddr_in结构,然后进行绑定【bind】,再填充服务器的地址结构,然后调用【connect】进行连接,当连接成功后,第一阶段的工作便结束了。
第二阶段,发送文件。
服务器端:使用循环while,结束条件是(!feof(fp)),fp是文件指针,feof检测当前的文件读取指针是否到达文件尾部,若到达了就返回真,否则返回假。然后在循环内部依次调用【fread】、【send】进行发送。这里有一个问题需要注意,调用fread的时候有两个参数是要每次读多少字节和读多少次,将第一个设置为1,将第二个设置为缓冲区的大小,用一个变量记录实际读到多少字节,即【fread】的返回值,然后将其传递给【send】,就可以实现发送文件了,在发送完成后断开连接【closesocket】,关闭文件【fclose】。
客户端:使用while死循环,调用【recv】接收文件,【fwrite】写入文件,这里也有个和上面类似的问题,就是要将recv的返回值传递给fwrite的第三个参数,即受到了多少字节,就向文件中写多少字节。当recv返回值为0时(连接断开时)退出循环,【closesocket】关闭套接字,调用【fclose】关闭文件。
全部回答
发送的都是package,一般可能每个package是1k左右。 你可以通过调用同步发送方式,然后自己做个时间计算,2个package之间的时间是多少。 比如,每个package是1k,从上次发送前到现在的时间是5ms。如果现在继续发送的话,那么上个5ms的流量就是1k/0.005s=200k/s。 如果你想限制速度到50k/s,这个时候我们经过计算可以知道,每个package的1k的包,需要20ms。(1000ms/50k/1k=20ms。)那么我们需要sleep(15)等待15ms后再发送。 基于你问题的另外一种理解,你的网络带宽是2m的,那么理论传输速率是2x1024/8=256k/s,如果你只想正常发送的话,中间不需要做任何事情,直接发送,在同步tcp的作用下,每个package都需要发送成功后再返回发送下一个package,那么它会自动使用满整个网络带宽(前提是你和对方的连接足够好,你们之间的连接速率能够达到2m的水平。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
单选题人之所以具有潜能,是因为A.自我是不会
android的fragment的作用
请问,新手如果想练技术应该坚持用手动档吗?
番茄黑鱼豆腐汤怎么做
如果|3x+3|+|x+3y-2|=0,那么点P(x,y)在第
大话西游手游时间服和免费服的区别
垂青的意思
辽阳市人民检察院举报中心位置在什么地方啊,
奥巴马当选了美国总统是怎么回事?
油箱进水怎么办
单选题针对金融风暴带来的负面影响,发展中国
辽阳市人民检察院反贪污贿赂局办公位置在哪啊
单选题关于α射线、β射线、γ射线的穿透本领
宏伟区人民检察院经济罪案举报中心地址有知道
下列划线的成语使用不恰当的一项是A.1945年,
推荐资讯
单选题下列物质能水解且最终水解产物有两种的
选出句序排列正确的一项是①没有孔子牌位,我
巴音郭楞州且末县琼库勒派出所地址在什么地方
While he was in his college days he used t
英子的乡恋故乡一日主要内容
徐州市公安局交通管理局高速公路六大队地址在
问一下龙虾怎样分公母?(最好带图片)
梦幻西游手游龙宫龙太子52级分配点,体0魔199
我认为明天不会下雨 不是吗 ?英语怎么说
唱南山南的叫马什么?
单选题南北朝时期的民族融合过程,从经济发展
成都到汉中多少公里
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?