|
Шаг 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
Загрузить проект | Предыдущий шаг | Следующий Шаг | Оглавление By Artem.
Используются технологии uCoz
|