Сетевые технологии. Баканов В.М. - 33 стр.

UptoLike

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

- 33 -
NetSocket.SetSocketState (SKT_RECVPACKET);
end; { конец ProcessHostSend }
При приеме пакета необходимо убедиться в том, что он непуст (host-
компьютер часто сначала посылает пустой пакет), при получении пустого па-
кета запрос необходимо повторить. При приеме действительного пакета сле-
дует использовать функцию ntohl() для преобразования разрядов из порядка
разрядов InterNet в порядок разрядов Intel (в исходно разработанном для
UNIX стандарте последовательность байт в полном IP-адресе суть ‘1-2-3-4’, а
для 32-битовых Intel-процессоров последовательность ‘2-1-4-3’) и закрыть
гнездо:
procedure TForm1.ProcessHostReceive;
var IsRetnStr: PChar;
llINetTime, lllntelTime: LongInt;
begin
{ время принимаем как длинное целое ilInetTime (объявлено глобальным) }
recv(isConnectionSocket, ilINetTime, sizeof(LongInt), 0);
if (ilINetTime <> 0) then { если принятое значение не пусто… }
begin
lllntelTime := ntohl(illNetTime);
IsRetnStr := InTime (llIntelTime); { перевод длинного целого в строку }
IsRetnStr[(StrLen(IsRetnStr)-1)] := #0;
HostResponse.Lines.Add (StrPas (IsRetnStr));
NetSocket.SetSocketState (SKT_NOOP);
NetSocket.CloseSocketConnection (isConnectionSocket);
end;
end; { конец ProcessHostReceive }
Функция, преобразующая системное время host-компьютера в закрытую
нулем строку, написана на C и оформлена как DLL с именем intimec.dll:
char *far PASCAL _export InTime (long inettime)
{ long llTime;
char *lsTimeStr;
llTime = inettime - DATE_TIME_REF_POINT;
IsTimeStr = ctime ((time_t *) &llTime);
return (IsTimeStr) ;
} /* конец InTime */
Функция ctime() выполняет преобразование полученной метки времени
(часто посылается в виде среднего времени по Гринвичу - GMT) в местное
время на основе временного пояса, который определен в конфигурации опе-
рационной системы клиентской машины.
Т.о. рассмотрен процесс создания простого клиентского приложения на
основе сокетов. Единственным отличием между созданием приложения кли-
ента WinSock и сервера WinSock является способ, используемый для со-
 NetSocket.SetSocketState (SKT_RECVPACKET);
end; { конец ProcessHostSend }

  При приеме пакета необходимо убедиться в том, что он непуст (host-
компьютер часто сначала посылает пустой пакет), при получении пустого па-
кета запрос необходимо повторить. При приеме действительного пакета сле-
дует использовать функцию ntohl() для преобразования разрядов из порядка
разрядов InterNet в порядок разрядов Intel (в исходно разработанном для
UNIX стандарте последовательность байт в полном IP-адресе суть ‘1-2-3-4’, а
для 32-битовых Intel-процессоров последовательность ‘2-1-4-3’) и закрыть
гнездо:

procedure TForm1.ProcessHostReceive;
var IsRetnStr: PChar;
      llINetTime, lllntelTime: LongInt;
begin
{ время принимаем как длинное целое ilInetTime (объявлено глобальным) }
 recv(isConnectionSocket, ilINetTime, sizeof(LongInt), 0);
 if (ilINetTime <> 0) then { если принятое значение не пусто… }
 begin
   lllntelTime := ntohl(illNetTime);
   IsRetnStr := InTime (llIntelTime); { перевод длинного целого в строку }
   IsRetnStr[(StrLen(IsRetnStr)-1)] := #0;
   HostResponse.Lines.Add (StrPas (IsRetnStr));
   NetSocket.SetSocketState (SKT_NOOP);
   NetSocket.CloseSocketConnection (isConnectionSocket);
 end;
end; { конец ProcessHostReceive }

  Функция, преобразующая системное время host-компьютера в закрытую
нулем строку, написана на C и оформлена как DLL с именем intimec.dll:

char *far PASCAL _export InTime (long inettime)
{ long llTime;
  char *lsTimeStr;
 llTime = inettime - DATE_TIME_REF_POINT;
 IsTimeStr = ctime ((time_t *) &llTime);
 return (IsTimeStr) ;
} /* конец InTime */

  Функция ctime() выполняет преобразование полученной метки времени
(часто посылается в виде среднего времени по Гринвичу - GMT) в местное
время на основе временного пояса, который определен в конфигурации опе-
рационной системы клиентской машины.
  Т.о. рассмотрен процесс создания простого клиентского приложения на
основе сокетов. Единственным отличием между созданием приложения кли-
ента WinSock и сервера WinSock является способ, используемый для со-

                                       - 33 -