#c #sockets #server #network-programming
#c #сокеты #сервер #сетевое программирование
Вопрос:
Я полагаю, что inet_ntop () должен преобразовать адрес struct sockaddr в строку, в настоящее время у меня есть :
sin_size = sizeof their_addr;
new_fd = accept(sockfd, (struct sockaddr *)amp;their_addr, amp;sin_size);
inet_ntop(AF_INET6, amp;(((struct sockaddr_in6 *)amp;their_addr)->sin6_addr), s, sizeof s);
printf("server: got connection from %sn", s);
Если я установлю соединение из http://localhost:3490/thispage.html , я ожидаю, что код будет распечатан
http://localhost:3490/thispage.html но все, что он выводит, это «сервер: получено соединение от :: 1».
Я не понимаю, почему это происходит — в основном то, что я пытаюсь сделать, это получить имя HTML-страницы из URL-адреса, и я хотел извлечь его из возвращаемой строки, но строка возвращает не то, что я ожидал.
Комментарии:
1. Ваши ожидания неверны. Это касается только IP и IPv6-адресов, это не имеет ничего общего с URL-адресами.
2. Похоже, то, что вы ищете, — это заголовок HTTP
Referer:
.3. Вы знаете, как я мог бы получить это в программе на c?
4. Если программа C действует как веб-сервер, ей необходимо прочитать заголовки HTTP.
Ответ №1:
inet_ntop
Функция принимает структуру, содержащую IP-адрес, и преобразует ее в строковый формат. Он ничего не знает об URL-адресах.
Когда accept
возвращает, все, что произошло на данный момент, это то, что было установлено TCP-соединение, и their_addr
содержит IP-адрес конечной точки, которая подключилась, в данном случае ::1 , который и печатается.
Вам необходимо продолжить чтение из сокета, который предположительно содержит HTTP, чтобы узнать, какой URL был вызван.