gpt4 book ai didi

c - 循环时 recv() 函数如何工作?

转载 作者:太空狗 更新时间:2023-10-29 16:12:06 25 4
gpt4 key购买 nike

我在 MSDN 中阅读了有关 send() 和 recv() 函数的内容,但有一件事我不确定自己是否理解。

例如,如果我发送一个大小为 256 的缓冲区,并接收到前 5 个字节,那么下次我调用 recv() 函数时,它会指向第 6 个字节并从那里获取数据吗?

例如:

char buff[256];
memcpy(buff,"hello world",12);
send(sockfd, buffer, 100) //sending 100 bytes

//server side:
char buff[256];
recv(sockfd, buff, 5) // now buffer contains : "Hello"?
recv(socfd, buff,5) // now I ovveride the data and the buffer contains "World"?

谢谢!

最佳答案

在 C 中从 TCP 循环接收到缓冲区的正确方法如下:

char buffer[8192]; // or whatever you like, but best to keep it large
int count = 0;
int total = 0;

while ((count = recv(socket, &buffer[total], sizeof buffer - total, 0)) > 0)
{
total += count;
// At this point the buffer is valid from 0..total-1, if that's enough then process it and break, otherwise continue
}
if (count == -1)
{
perror("recv");
}
else if (count == 0)
{
// EOS on the socket: close it, exit the thread, etc.
}

关于c - 循环时 recv() 函数如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27205810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com