SOCKET中的recv()接受比指定缓冲区大的数据包的问题

引子:

发送的是1000字节:    send(socket,buf,1000,0);)。

而设置接收的缓冲区大小是100字节:    recv( socket,buffer,100,flag);

解决方法:写个循环接收(是个地球人就知道)!

附加网上找的答复:

1。发送时如果数据量太大,系统或网络会自动把数据分解成小块,如果你想自己把它分解也未尝不可,即把大量数据分成多次发送。至于接收方面,TCP协议没有数据边界,即一个发出的数据可能会在多次接收中才能全部接收完,而且多次发出的少量数据收可能在一次接收中全部收到了,因此得由你的程序来确定数据的边界(程序协议)。

2。 省略。。。

问题:我想知道 recv() 的响应机制!

我迷惑的地方:假设传过来1024字节,我接收缓冲是100字节,

1. 这个recv()不是是从端口中一个字节一个字节读,而是传过来的数据已经保存在系统缓冲区中,在缓冲区中读?应该是这样的吧?!

2.如果标志位flagMSG_PEEK不删除缓冲区,那么如果循环的话就死循环下去?(1024>100)

3。什么时候返回? 这个是我最关心的

3.1填充满接收缓冲 :满了之后肯定就返回,这个应该是肯定的!  那么如果发过来的N个包,而N个包的总合小于接收缓冲的大小呢?按“附加网上找的答复”中的意思是填满为止?自己去解析?

3.2没添充满接收缓冲:如果填不满,而且端口没有在接收数据也就是系统缓冲区内是包尾,就返回?

     要是端口在接收数据就等待填满或结尾返回?

谁能给我讲解一下?万分感谢!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值