问题提出背景:
我想实现文件的等比例传输,就是以每次多少节发送就以多少字节接收。10K以下发送接收都没有问题,超过10K的话,发送正常,但接收端在处理第一个包的时候出现一个奇怪的现象:第一次接收大部分内容,剩下的会在第二次中接收,这两次接收到的恰好是发送的第一个分包内容。更奇怪的是后面的分包发送接收又正常了!
个人猜测:
第一次发送的数据在没有完全写入缓冲区前就调用了Receive接收,所以数据不全。而在刚接收完之后没有写入的数据进来了(发送端的Send并没有再次调用前),Receive再次响应将第一个分包剩下内容接收完毕。而至于后面的分包发送接收正常大概也跟时间差有关系。
所以我想到通过判断Socket缓冲区中含有的字节数来决定是否接收,这样就可以保证等比例接收了。不知道能否实现,请高人指点!
如何获取当前Socket缓冲区中含有的字节数?
答案:1 悬赏:50 手机版
解决时间 2021-12-29 23:14
- 提问者网友:辞取
- 2021-12-29 10:25
最佳答案
- 五星知识达人网友:掌灯师
- 2021-12-29 11:24
你用的肯定是tcp协议传的数据, tcp是数据流, 没有数据包的概念。
用recv所接收的可能是发送的“包”的一部分, 也可能是几个包合在了一块。
如果需要用数据包, 可以用udp协议, 不过可靠性会差些,如果是在局域网用udp协议再加上对包的回复确认功能是可以的。
用recv所接收的可能是发送的“包”的一部分, 也可能是几个包合在了一块。
如果需要用数据包, 可以用udp协议, 不过可靠性会差些,如果是在局域网用udp协议再加上对包的回复确认功能是可以的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯