Практическое введение в Internet, E-Mail, FTP, WWW и HTML


              

Поле sin_addr этой структуры представляет


#define SERV_PORT 5000 srv_address.sin_port = htons(SERV_PORT);
Вернемся снова к структуре sockaddr_in .
Поле sin_addr этой структуры представляет собой структуру in_addr:
struct in_addr { union { struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b; struct { u_short s_w1,s_w2; } S_un_w; u_long S_addr; } S_un; }; #define s_addr S_un.S_addr #define s_host S_un.S_un_b.s_b2 #define s_net S_un.S_un_b.s_b1 #define s_imp S_un.S_un_w.s_w2 #define s_impno S_un.S_un_b.s_b4 #define s_lh S_un.S_un_b.s_b3
При инициализации сокета в этой структуре вы должны указать адрес IP, с которым будет работать данный сокет.
Если сокет будет работать с любым адресом (например, вы создаете сервер, который будет доступен из узлов с любым адресом), адрес для сокета можно указать следующим образом:
srv_address.sin_addr .s_addr = INADDR_ANY ;
В том случае, если сокет будет работать с определенным адресом IP (например, вы создаете приложение-клиент, которое будет обращаться к серверу с конкретным адресом IP), в указанную структуру необходимо записать реальный адрес.
Датаграммный протокол UDP позволяет посылать пакеты данных одновременно всем рабочим станциям в широковещательном режиме. Для этого вы должны указать адрес как INADDR_BROADCAST.
Если вам известен адрес в виде четырех десятичных чисел, разделенных точкой (именно так его вводит пользователь), то вы можете заполнить поле адреса при помощи функции inet_addr :
dest_sin.sin_addr .s_addr = inet_addr ("200.200.200.201");
В случае ошибки функция возвращает значение INADDR_NONE , что можно использовать для проверки.
Обратное преобразование адреса IP в текстовую строку можно при необходимости легко выполнить с помощью функции inet_ntoa , имеющей следующий прототип:
char FAR * inet_ntoa (struct in_addr in);
При ошибке эта функция возвращает значение NULL.
Однако чаще всего пользователь работает с доменными именами, используя сервер DNS или файл HOSTS . В этом случае вначале вы должны воспользоваться функцией gethostbyname , возвращающей адрес IP, а затем записать полученный адрес в структуру sin_addr :

Содержание  Назад  Вперед