引子:
发送的是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没添充满接收缓冲:如果填不满,而且端口没有在接收数据也就是系统缓冲区内是包尾,就返回?
要是端口在接收数据就等待填满或结尾返回?
谁能给我讲解一下?万分感谢!