АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Практична частина

Читайте также:
  1. I Всеукраїнська науково-практична конференція іноземними мовами.
  2. VІ. Узагальнення і систематизація знань. Практична робота
  3. Б) Змістовна частина тестових завдань.
  4. В итоге если все частицы собрать по правильной и проверенной технологии, получится красивая, эстетичная, экологичная и практичная столешница GraniStone любой формы и размеров.
  5. Вимоги до оформлення звітів з практичних робіт з предмету «Практична робота на ПК»
  6. Всеукраїнська студентська науково-практична конференція
  7. Вступ Основна частина Висновки ПИТАННЯ-
  8. Графічна частина
  9. Графічна частина
  10. Графічна частина курсового коректу
  11. ГРАФІЧНА ЧАСТИНА ПРОЕКТУ
  12. Графічна частина.

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. Послідовність отриманих екранних результатів

Сервер до підключення клієнта:

 

Сервер після підключення клієнта та прийому/передачі даних:

 

Клієнт:


1 | 2 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.008 сек.)