recv函数,windows socket编程中send与recv函数的收发数据不一致问题


这几天在使用windows的socket编程去做文件的传输,发现这个windows下的socket编程也真和以前接触过的java和C#的有很多的不同,有异步的模型也有同步的模型,为了简单起见我还是使用了同步阻塞模型,没想到这个阻塞也还不是想象中的阻塞,以前使用send发送完数据后,recv就会把数据都接完,调试了很久,发现recv老是接收的数据比send的要少,上网查了一下,大概明白recv就是只要socket的接收缓冲区一有数据就会返回,不过还是会尽量多地接收用户缓冲区所指定大小的数据。因为我是将一个文件分为若干块进行传输,因此只有在接受端每接收文件的一块都使用一个循环直到recv到指定的块大小后在写入文件,代码如下:
Packet pack;
int nRecv = 0;
while (nRecv != sizeof(pack))
{
int tmp = ::recv(s, (char*)&pack + nRecv, sizeof(pack) - nRecv, 0);
if (tmp
Tags:  socket函数 recv函数

延伸阅读

最新评论

发表评论