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/