![]() |
![]() |
|
![]() |
||||||||||||||||||
![]() |
![]() |
![]() |
||||||||||||||||
|
![]() |
|
![]() |
|
||||||||||||||
![]() |
![]() |
![]() |
Шаг 5 - Связь сокета с портомОпять создаем тот же проект, что и в предыдущих шагах. Я снова вынес пройденный код в процедуры. Только переменную SOCKET я сделал глобальной, так как она в последствии будет использоваться во многих командах. То что должно находиться в этих процедурах понятно из прошлых шагов. ...... void CreateSocket(); void CloseScoket(); SOCKET servsocket; ...... После создания сокета его нужно связать с портом. Для этого существует функция bind. Но нам нужен номер порта для связи, я его объявил так: #define PORT_ADDR 80 Мы пытаемся реализовать сервер работающий по протоколу HTTP, а для этого протокола используется порт 80. Вы можете, если конечно знаете, использовать другие порты. Для организации связи нам необходимо создать структуру SOCKADDR_IN она необходима для выполнения команды bind и в ней содержатся параметры связи, такие как порт и атрибуты. Вот её описание. struct sockaddr_in{ short sin_family; unsigned short sin_port; struct in_addr sin_addr; char sin_zero[8];}; В данной структуре есть вложенная структура sin_addr она описана вот так: struct in_addr { union { struct{ unsigned char s_b1, s_b2, s_b3, s_b4; } S_un_b; struct{ unsigned short s_w1, s_w2; } S_un_w; unsigned long S_addr; } S_un; }; После описания структур и заполения данными можно вызывать bind: SOCKADDR_IN socketaddr; socketaddr.sin_family = AF_INET; socketaddr.sin_addr.s_addr = INADDR_ANY; socketaddr.sin_port = PORT_ADDR; if (bind(servsocket,(LPSOCKADDR)&socketaddr,sizeof(socketaddr)) == SOCKET_ERROR) { printf("Error bind socket"); exit(1); } else printf("God bind socket !!!!!!\n"); Вот её описание: int bind ( SOCKET s, const struct sockaddr FAR* name, int namelen ); Если всё нормально, то данная функция вернет 0 в противном случае SOCKET_ERROR. Загрузить проект | | | Автор Каев Артем. |
![]() |
![]() |
![]() |
|