如何解决为什么我的 HTTP 服务器只收到第一个 GET 请求
我想使用本机 C/C++ 套接字编写自己的服务器,这些套接字将响应浏览器的 HTTP GET 请求。我编写了服务器从客户端接收某些东西所需的所有代码,并且它可以工作。好吧,对于第一个 GET 请求...
当我打开浏览器并转到 localhost 时,浏览器成功连接到服务器,并向其发送这样的请求。
获取/HTTP/1.1
然后,我的服务器使用最简单的标准 html 页面发送响应,其中包含文本和指向 style.css 文件的链接。之后,浏览器发送一个 style.css 请求
获取/style.css HTTP/1.1
但是它已经没有到达服务器,它只是消失在某个地方。 Chrome 中的 DevTools 告诉我请求已发送,它等待响应,但服务器完全没有收到任何请求(JS 文件、favicon.ico 等),我自己无法真正解决这个问题。我想知道这是否与我的代码有关。
这是代码的最小复制。
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2,2),&wsaData) != 0)
{
std::cout << "WSAStartup Failed. Aborting.\n";
return 1;
}
std::cout << "Initialized.\n";
int client;
int server;
client = socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in server_addr;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(15742);
bind(client,reinterpret_cast<struct sockaddr*>(&server_addr),sizeof(server_addr));
std::cout << "Binding done\n";
listen(client,1);
int size = sizeof(server_addr);
std::cout << "Waiting to accept a client\n";
server = accept(client,&size);
std::string HTTPresponseBase;
std::string responsehtml;
std::string responsecss;
constexpr size_t buff_size = 2048;
char buffer[buff_size] = { 0 };
HTTPresponseBase = R"response(HTTP/1.1 200 OK\n\n)response";
std::string html = R"html(<html>
<head>
<title>An Example Page</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<p class="header">Hello World,this is a very simple HTML document.</p>
</body>
</html>)html";
std::string css = R"css(
.header{
color: red;
}
)css";
responsehtml = HTTPresponseBase;
responsehtml += html;
responsecss = HTTPresponseBase;
responsecss += css;
std::string message;
if (server > 0)
{
std::cout << "Connected to web-browser\n";
while (true) {
recv(server,buffer,buff_size,0);
if (buffer[0] == 0)
continue;
std::cout << "Client:\n" << buffer << '\n';
if(strstr(buffer,"GET / "))
send(server,responsehtml.c_str(),responsehtml.size() + 1,0);
else if (strstr(buffer,"GET /style.css"))
send(server,responsecss.c_str(),responsecss.size() + 1,0);
std::cout << "Response sent\n";
memset(buffer,buff_size);
}
}
在此先感谢您!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。