|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Практична частина1. Тексти програм Сервер:
program echo_server;
{$APPTYPE CONSOLE}
uses SysUtils, DateUtils, WinSock;
var wsData: WSAData; service: sockaddr_in; ListenSocket, AcceptSocket: Integer; i, bytesSent, bytesRecv: Integer; buffer: array [0..32] of Char;
begin { ініціалізуємо бібліотеку Winsock } if WSAStartup($0202, wsData) <> 0 then begin writeln('initialization error.'); readln; exit; end;
{ створюємо сокет } ListenSocket:= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if ListenSocket = INVALID_SOCKET then begin writeln('initialization error.'); WSACleanup; readln; exit; end;
{ заповнюємо IP адресу та порт } service.sin_family:= AF_INET; service.sin_addr.s_addr:= inet_addr('127.0.0.1'); service.sin_port:= htons(7);
{ відкриваємо сокет для підключення } if bind(ListenSocket, service, sizeof(service)) = SOCKET_ERROR then begin writeln('bind failed.\n'); closesocket(ListenSocket); WSACleanup; readln; exit; end;
{ чекаємо на підключення клієнта } listen(ListenSocket, 1);
while true do begin writeln('waiting for client...');
{ приймаємо підключення від клієнта } AcceptSocket:= SOCKET_ERROR; while AcceptSocket = SOCKET_ERROR do AcceptSocket:= accept(ListenSocket, nil, nil);
writeln('client connected.');
{ отримуємо та відправляємо дані за стандартом протоколу } for i:= 0 to 6 do begin buffer:= ''; bytesRecv:= SOCKET_ERROR; while bytesRecv = SOCKET_ERROR do begin bytesRecv:= recv(AcceptSocket, buffer, 32, 0); if (bytesRecv = 0) or (bytesRecv = WSAECONNRESET) then begin writeln('connection closed.'); break; end; write('bytes recived: ', bytesRecv, ' '); end;
bytesSent:= send(AcceptSocket, buffer, 32, 0); writeln('bytes sent: ', bytesSent); end;
closesocket(AcceptSocket); end;
{ закриваємо сокет } closesocket(ListenSocket); WSACleanup; readln; end.
Клієнт:
program echo_client;
{$APPTYPE CONSOLE}
uses SysUtils, DateUtils, WinSock;
var wsData: WSAData; service: sockaddr_in; ConnectSocket: Integer; i, bytesSent, bytesRecv: Integer; sendbuf, recvbuf: array [0..32] of Char; time_stamp: Word; ip_addr: String;
begin { ініціалізуємо бібліотеку Winsock } if WSAStartup($0202, wsData) <> 0 then begin writeln('initialization error.'); read; exit; end;
{ створюємо сокет } ConnectSocket:= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if ConnectSocket = INVALID_SOCKET then begin writeln('initialization error.'); WSACleanup; readln; exit; end;
{ заповнюємо IP адресу та порт } write('server address: '); readln(ip_addr); service.sin_family:= AF_INET; service.sin_addr.s_addr:= inet_addr(ip_addr); service.sin_port:= htons(7);
{ підключаємося до сервера } if connect(ConnectSocket, service, sizeof(service)) = SOCKET_ERROR then begin writeln('connection failed.'); closesocket(ConnectSocket); WSACleanup; readln; exit; end;
writeln('connected to server'); writeln;
for i:= 0 to 6 do begin { відправляємо та отримуємо дані } sendbuf:= 'абвгдеёжзийклмнопрстуфхцчьыъэюя'; recvbuf:= '';
bytesSent:= send(ConnectSocket, sendbuf, 32, 0); write('bytes sent: ', bytesSent, ' ');
time_stamp:= MilliSecondOf(Time);
bytesRecv:= SOCKET_ERROR; while bytesRecv = SOCKET_ERROR do begin bytesRecv:= recv(ConnectSocket, recvbuf, 32, 0); if (bytesRecv = 0) or (bytesRecv = WSAECONNRESET) then begin writeln; writeln('connection closed.'); break; end; write('bytes recived: ', bytesRecv, ' delay: ', MilliSecondOf(Time) - time_stamp, ' ms ');
if sendbuf = recvbuf then writeln('OK') else writeln('WRONG'); end; end;
{ закриваємо сокет } closesocket(ConnectSocket); WSACleanup; readln; end. 2. Послідовність отриманих екранних результатів Сервер до підключення клієнта:
Сервер після підключення клієнта та прийому/передачі даних:
Клієнт: Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.008 сек.) |