Шаг 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.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 15.01.2000