TCP协议传输图片问题?

Threathuntet 2006-11-12 02:16:42
请问以下方式中接收方怎样收到发送方的数据报
发放:
while(1)
{
send();//每次发送2092字节的数据报
}
接方
while(1)
{
recv();//
}
请问接收方是每次都收到2092字节的数据报吗?还是会出现,发送方会将多个2092字节的数据报放在一起,一块发送给接收方,接收方收到的数据将大于2092字节?

补充:我问这个问题的原因:
本人在局域网中采用TCP/Ip协议使用客户服务器端的方式从一端发送图片到另一端,发送时先发送图片的大小,然后再对图片进行切割发送分成2092字节的数据报(由于完成的程序还要发送别的文件,所以每次发送图片时还添加标记表示该报文为图片);接收方先接收文件长度,然后分别接收后续的文件;采用这种方式时接收方生成的文件大小常常小于发送方的文件大小,也就是接收不全!本人猜想可能是两种情况:1、传输的过程中丢失了报文。2、接收方接收到的是发送方发送的多个报文的组合,但是接收时程序将这个组合报文简单判断为一个2092字节的数据报,因此只是处理一个小的报文,造成了丢包情况!请各位达人指点!谢谢!
...全文
347 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
T97102003 2007-01-22
  • 打赏
  • 举报
回复
int ret = recv( s, (char)*buff[nIndex] , BytesToRead, 0);
/////上面这句写错,改成
int ret = recv( s, (char*)&buff[nIndex] , BytesToRead, 0);
T97102003 2007-01-22
  • 打赏
  • 举报
回复
每次发送2092字节,接收可以这样,

while(1)
{
char buff[2092] = {0};
int nIndex = 0;
int BytesToRead = 2092;

while(BytesToRead>0)
{
int ret = recv( s, (char)*buff[nIndex] , BytesToRead, 0);
BytesToRead -= ret;
nIndex += ret;
}
}
vcnewer 2007-01-22
  • 打赏
  • 举报
回复
setsockopt 设置 TCP_NODELAY
Threathuntet 2006-11-12
  • 打赏
  • 举报
回复
同过试验发现接收方接收数据时,的确存在接收的数据有时为2092字节,有时为16384的情况!请教各位解释一下为什么?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧