ВУЗ:
Составители:
Рубрика:
- 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 -
Страницы
- « первая
- ‹ предыдущая
- …
- 31
- 32
- 33
- 34
- 35
- …
- следующая ›
- последняя »