Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Виртуальные хосты (http сервер)


Автор: _Alex 20.5.2007, 16:17
Допустим есть простой сервер ждущий на порту 80.
Принцып работы:
Код

#include <winsock2.h>

SOCKET server_socket;
struct sockaddr_in servaddr;

server_socket = socket(AF_INET, SOCK_STREAM, 0);

servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = INADDR_ANY;
servaddr.sin_port = 80;
bind(server_socket, (struct sockaddr *)&servaddr, sizeof(servaddr));
listen(server_socket, 100);

SOCKET new_fd;
struct sockaddr_in cliaddr;
new_fd = accept(server_socket, (struct sockaddr *)&cliaddr, (int)sizeof(struct sockaddr_in));

char buf[10000];
int bytesRecv;
bytesRecv = recv(new_fd, buf, 10000, 0);
send(new_fd, buf, bytesRecv, 0);
//...

К такой программе можно обратиться "http://localhost/"

Вопрос: Как сделать виртуальные хосты? http://sub.localhost/

З.Ы.
Исходники Apache мне разобрать не удалось.


Автор: ptr 21.5.2007, 08:15
На твой сервер приходит запрос, например GET, в нем поле Host. И уже из этого поля сервер определяет на какой хост был запрос.

Автор: _Alex 21.5.2007, 11:54
Цитата(ptr @  21.5.2007,  08:15 Найти цитируемый пост)
На твой сервер приходит запрос, например GET, в нем поле Host.

Да, это так, но у меня проблема была в том что запрос не приходил...

Оказалось что нужно было добавить "127.0.0.1     sub.localhost" 
в файл "C:\WINDOWS\system32\drivers\etc\hosts"

И ещё вопрос, где нужно добавить такую запись в UNIX подобных ОС?




Автор: ptr 21.5.2007, 12:49
А как ты хотел чтобы браузер узнал IP хоста? Либо из DNS, либо из hosts.
Код

/etc/hosts

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)