Программное обеспечение компьютерных сетей и информационных систем. Баканов В.М. - 45 стр.

UptoLike

Составители: 

- 45 -
няющей обмен по сети. На одном узле может одновременно работать не-
сколько программ, использующих разные порты.
Особенностью поля sin_port является использование так называемого
сетевого формата данных. Этот формат отличается от того, что принят в
процессорах с архитектурой Intel, а именно - младшие байты данных хранят-
ся по старшим адресам памяти (архитектура
процессоров Intel подразумевает
хранение старших байтов данных по младшим адресам).
Cетевой формат данных удобен при организации глобальных сетей, так
как в узлах такой сети могут использоваться компьютеры с различной архи-
тектурой.
Для выполнения преобразований из обычного формата в сетевой и об-
ратно в интерфейсе Windows Socket предусмотрен специальный набор
функций. В
частности, для заполнения поля sin_port нужно использовать
функцию htons, выполняющую преобразование 16-разрядных данных из
формата Intel в сетевой формат.
Ниже показано, как инициализируется поле sin_port в приложении
SERVER, полностью описанном в [13]
#define SERV_PORT 5000
srv_address.sin_port = htons(SERV_PORT);
Поле sin_addr структуры sockaddr_in представляет собой структуру
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;
При инициализации сокета в этой структуре следует указать адрес IР
(32-битовое уникальное число, идентифицирующее данный компьютер, о
                                        - 45 -


няющей обмен по сети. На одном узле может одновременно работать не-
сколько программ, использующих разные порты.
     Особенностью поля sin_port является использование так называемого
сетевого формата данных. Этот формат отличается от того, что принят в
процессорах с архитектурой Intel, а именно - младшие байты данных хранят-
ся по старшим адресам памяти (архитектура процессоров Intel подразумевает
хранение старших байтов данных по младшим адресам).
     Cетевой формат данных удобен при организации глобальных сетей, так
как в узлах такой сети могут использоваться компьютеры с различной архи-
тектурой.
     Для выполнения преобразований из обычного формата в сетевой и об-
ратно в интерфейсе Windows Socket предусмотрен специальный набор
функций. В частности, для заполнения поля sin_port нужно использовать
функцию htons, выполняющую преобразование 16-разрядных данных из
формата Intel в сетевой формат.
     Ниже показано, как инициализируется поле sin_port в приложении
SERVER, полностью описанном в [13]

#define SERV_PORT 5000

srv_address.sin_port = htons(SERV_PORT);

    Поле sin_addr структуры sockaddr_in представляет собой структуру
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;

     При инициализации сокета в этой структуре следует указать адрес IР
(32-битовое уникальное число, идентифицирующее данный компьютер, о