inet_ntop() не печатает URL-адрес

#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 был вызван.