我发现评分最高的答案有助于理解概念上需要做什么,但它不能帮助新的 C/C++ 开发人员理解如何阅读标题。
诀窍是要意识到,您可以通过 Google 找到的大多数 TCP 服务器示例都没有向读者展示如何实际接收请求!您需要使用该recv
方法并将请求读入您可以解析的内容。在下面的示例中,我将其读入vector<char>
被调用的but
(简称buffer
)并使用buf.data()
来访问底层 char 数组以打印到控制台。
假设您有一个新的客户端套接字...
listen(sock, 5);
while (1) {
// Make a new socket for the client that just tried to connect
client_fd = accept(sock, (struct sockaddr *) &cli_addr, &sin_len);
char buffer[1024] = {0};
int server_fd, new_socket, valread;
valread = read(sock , buffer, 1024);
std::cout << buffer << std::endl;
printf("got connection\n");
// Handle a case where you can't accept the request
if (client_fd == -1) {
perror("Can't accept");
continue;
}
// Recieve data from the new socket that we made for the client
// We are going to read the header into the vector<char>, and then
// you can implement a method to parse the header.
vector<char> buf(5000); // you are using C++ not C
int bytes = recv(client_fd, buf.data(), buf.size(), 0);
std::cout << bytes << std::endl;
std::cout << sizeof(buf);
std::cout << buf.data() << buf[0] << std::endl;
要阅读有关套接字 API 的更多信息,Wikipedia 文章是一个非常好的资源。 https://en.wikipedia.org/wiki/Berkeley_sockets