Опять создаем тот же проект, что и в предыдущих шагах.
Я снова вынес пройденный код в процедуры. Только переменную 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.