socket客户端接收数据,是接收完再组包,还是一次接收一个整包?
只有20分了,但是还有好几个问题想问一下,大家帮帮忙。。。
服务端发送的数据是 包头+包体,包头int指明包长度,现在我用两种方法来接收:
1。 首先接收一个包头,得到包体长度之后,再接收一个整包:
rv = recv( s, buf, 4, 0); //获取包头
但是 rv = recv( s, buf, 4, 0) 这句也有可能返回的不是4个字节(即使使用的无限时等待),例如是一个字节,2个字节,或者3个字节,请问这时是否应该再加一个循环,直到累计接收长度等于4为止? 因为仅仅是一个包头,感觉还是处理的有些复杂
2。 socket只负责接收数据,并拷贝到Buf中,外部程序不停的检测Buf,如果发现一个整包,就从Buf中剪切出这个包。
这儿有两个地方比较模糊:
第一是Buf,我现在使用的string, 有数据来就加到string中,检测到string中足够一个整包,则剪切出整包。Buf中剩余的部分累加到下次接收的数据中。 请问通常是这样做的吗? 使用vector或者deque,或者直接char数组更好些?
第二是如何来检测Buf中是否足够一个整包? 我现在使用的每隔一定时间来检测,先看包头,再看Buf中接收数据的长度,使用一个while循环,加上一个Sleep函数等待一定时间重新检测。这种方法比较简单粗暴, 请问通常应该怎么做?
多谢了!