gpt4 book ai didi

C++ HTTP 客户端在 GET 请求后挂起 read() 调用

转载 作者:可可西里 更新时间:2023-11-01 15:28:01 27 4
gpt4 key购买 nike

std::string HTTPrequest = "GET /index.html HTTP/1.1\r\nHost: www.yahoo.com\r\nConnection: close\r\n\r\n";

write(socket, HTTPrequest.c_str(), sizeof(HTTPrequest));

char pageReceived[4096];

int bytesReceived = read(socket, pageReceived, 4096);

我有一个从我的终端运行的 HTTP 客户端程序。我还有一个网络服务器程序。使用网络服务器作为测试,我可以验证套接字创建和附件是否正常工作。

我如上所示创建请求,然后写入套接字。使用 print 语句,我可以看到代码超出了 write 调用。但是,它卡在读取调用上。

我不知道发生了什么 - 我的格式根据请求看起来是正确的。

有什么想法吗?当我连接到我的网络服务器时,一切似乎都运行良好,但 www.yahoo.com 和 www.google.com 都会导致挂起。我在 Linux 上。

最佳答案

在 C 和 C++ 中,sizeof 为您提供了保存一个类型所需的字节数,无论其内容如何。所以你没有发送完整的请求,只有 sizeof(std::string) 字节。您需要 HTTPRequest.size()(它为您提供 value 存储在 HTTPRequest 中的字节数),而不是 sizeof( HTTPrequest)(它为您提供 std::string 本身所需的字节数)。

关于C++ HTTP 客户端在 GET 请求后挂起 read() 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58535465/

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