ВУЗ:
Составители:
Рубрика:
- 28 -
4. Лабораторная работа № 4. Разработка клиентского сетевого
приложения на основе сокетов (подсоединение к службе даты-
времени)
Цель работы – приобретение практических знаний и навыков в разработ-
ке сетевых программ, использующих технологию сокетов (гнезд).
Теоретическая часть. Впервые понятие сокета как реализации функций
интерфейса прикладного программирования было предложено в университе-
те
Беркли, Калифорния (University of California at Berkeley Sockets API) при
разработке спецификации Berkeley UNIX [1]. Сокет (‘гнездо’ в дословном
переводе) обеспечивает конечную точку соединения и функционирует как
двунаправленный канал для входящих и исходящих данных между компью-
терами в сети.
При формальном программировании сокет более всего похож на иденти-
фикатор файла (file handle), который нужен для выполнения над файлом опе-
раций
чтения или записи (подробнее о программировании сокетов см. [2,6]).
Для ОС Windows разработан набор функций Windows Socket (WinSock API),
формально оформленный в виде DLL-библиотек (имя файла
wsock32.dll для
32-битовых Windows). В случае программирования на языках высокого уров-
ня каждый вызов WinSock-функций удобно обрамлять (‘обертывать’)
соответствующей функцией языка; например функции
send() посылки за-
полненного буфера и
recv() приема данных в буфер удобно оформить таким
образом:
procedure _TSocket.SocketSend(SendSocket: _SOCKET; hWnd: THandle;
wMsg: Word; sSendStr: String; NewState: Integer);
var liBytesSent: Integer;
begin
ii_SocketState := NewState;
StrDispose(icp_Buffer);
icp_Buffer := StrAlloc(1024);
StrPCopy(icp_Buffer, sSendStr);
WSAAsyncSelectfSendSocket, hWnd, wMsg, FD_READ+FD_WRITE);
liBytesSent := send(SendSocket, icp_Buffer, StrLen(icp_Buffer), 0);
if (liBytesSent = SOCKET_ERROR) then
if (WSAGetLastError <> WSAEWOULDBLOCK) then
ShowMessage(SocketError);
end; { конец SocketSend }
procedure _TSocket.SocketReceive(RecvSocket: _SOCKET; hWnd: THandle;
wMsg: Word; sBuffer: PChar; BufSize: Integer; NewState: Integer);
var liBytesReceived: Integer;
begin
WSAAsyncSelect(RecvSocket, hWnd, wMsg, FD_READ+FD_WRITE);
liBytesReceived := recv(RecvSocket, sBuffer, BufSize, 0);
4. Лабораторная работа № 4. Разработка клиентского сетевого приложения на основе сокетов (подсоединение к службе даты- времени) Цель работы – приобретение практических знаний и навыков в разработ- ке сетевых программ, использующих технологию сокетов (гнезд). Теоретическая часть. Впервые понятие сокета как реализации функций интерфейса прикладного программирования было предложено в университе- те Беркли, Калифорния (University of California at Berkeley Sockets API) при разработке спецификации Berkeley UNIX [1]. Сокет (‘гнездо’ в дословном переводе) обеспечивает конечную точку соединения и функционирует как двунаправленный канал для входящих и исходящих данных между компью- терами в сети. При формальном программировании сокет более всего похож на иденти- фикатор файла (file handle), который нужен для выполнения над файлом опе- раций чтения или записи (подробнее о программировании сокетов см. [2,6]). Для ОС Windows разработан набор функций Windows Socket (WinSock API), формально оформленный в виде DLL-библиотек (имя файла wsock32.dll для 32-битовых Windows). В случае программирования на языках высокого уров- ня каждый вызов WinSock-функций удобно обрамлять (‘обертывать’) соответствующей функцией языка; например функции send() посылки за- полненного буфера и recv() приема данных в буфер удобно оформить таким образом: procedure _TSocket.SocketSend(SendSocket: _SOCKET; hWnd: THandle; wMsg: Word; sSendStr: String; NewState: Integer); var liBytesSent: Integer; begin ii_SocketState := NewState; StrDispose(icp_Buffer); icp_Buffer := StrAlloc(1024); StrPCopy(icp_Buffer, sSendStr); WSAAsyncSelectfSendSocket, hWnd, wMsg, FD_READ+FD_WRITE); liBytesSent := send(SendSocket, icp_Buffer, StrLen(icp_Buffer), 0); if (liBytesSent = SOCKET_ERROR) then if (WSAGetLastError <> WSAEWOULDBLOCK) then ShowMessage(SocketError); end; { конец SocketSend } procedure _TSocket.SocketReceive(RecvSocket: _SOCKET; hWnd: THandle; wMsg: Word; sBuffer: PChar; BufSize: Integer; NewState: Integer); var liBytesReceived: Integer; begin WSAAsyncSelect(RecvSocket, hWnd, wMsg, FD_READ+FD_WRITE); liBytesReceived := recv(RecvSocket, sBuffer, BufSize, 0); - 28 -
Страницы
- « первая
- ‹ предыдущая
- …
- 26
- 27
- 28
- 29
- 30
- …
- следующая ›
- последняя »