gpt4 book ai didi

c++ - 如何在 winsock 编程中从 recv() 获取确切消息?

转载 作者:太空狗 更新时间:2023-10-29 19:48:19 27 4
gpt4 key购买 nike

我正在使用 C++ 中的 Winsock 开发服务器-客户端应用程序,但遇到了问题。

为了让服务器从客户端获取消息,我使用下面的代码。

int result;
char buffer[200];

while (true)
{
result = recv(client, buffer, 200, NULL);

if (result > 0)
cout << "\n\tMessage from client: \n\n\t" << message << ";";
}

我从客户端向服务器发送消息“Hello”。然而缓冲区实际上是这样的:

HelloÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ

我错过了什么?

最佳答案

因为 recv 可能不会收到你告诉它的那么多字节,你通常使用一个函数像这样接收指定数量的字节。修改自 here

int receiveall(int s, char *buf, int *len)
{
int total = 0; // how many bytes we've received
int bytesleft = *len; // how many we have left to receive
int n = -1;

while(total < *len) {
n = recv(s, buf+total, bytesleft, 0);
if (n <= 0) { break; }
total += n;
bytesleft -= n;
}

*len = total; // return number actually received here

return (n<=0)?-1:0; // return -1 on failure, 0 on success
}

如果您收到的字符串不是空终止的,则由您决定是否以空终止该字符串。

关于c++ - 如何在 winsock 编程中从 recv() 获取确切消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27527395/

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