logo
ГОСы - ответы [2012]

Билет 18

#include <stdio.h>

#include <string.h>

#include <Winsock2.h> // стандартная библиотека сокетов

int main(int argc,char ** argv)

{ if(argc==1)// парсим параметры командкой строки

{ printf("Use nettest s|c [address ]\n");// маленький хелп

return 0;

}

bool bServ=true;// флаг на сервер, false значит клиент

char Address[50]="127.0.0.1";// адрес соедининия

char data[512]="лобуда всякая";// данные

if(argc>=3 && argv[1][0]=='c'){bServ=false;strcpy(Address,argv[2]);}

WSAData wsa;// стандартная виндовская инициализация сокетов

WSAStartup(MAKEWORD (2,0),&wsa);

SOCKET s=socket(PF_INET,SOCK_STREAM,0);// создаем сокет

sockaddr_in service;service.sin_family = AF_INET;

service.sin_addr.s_addr = inet_addr( Address );

service.sin_port = htons( 39283 );

if(bServ)// организация сервера

{ if (bind( s, (SOCKADDR*) &service, sizeof(service)) != SOCKET_ERROR)

{ listen( s, 1 );

do{SOCKET AcceptSocket= SOCKET_ERROR;

while( AcceptSocket == SOCKET_ERROR )AcceptSocket = accept( s, NULL, NULL );

recv(AcceptSocket,data,512,0);// принимаем данные клиента

send(AcceptSocket,data,512,0);// посылаем назад

closesocket(AcceptSocket); // закрываем соединение

}while(1);

}

}else

{ // клиент

connect( s, (SOCKADDR*) &service, sizeof(service) );

// формируем данные

long Time=GetTickCount();// засекаем относительное время

send(s,data,512,0);

recv(s,data,512,0);

Time=GetTickCount()-Time;// посчитали время, успокоились

printf("\nTime is %li ms",Time);

}

closesocket(s); // закрываем соединение ( прослушивание)

WSACleanup(); // отключаем библиотеку

2 ВАРИАНТ

//ПРОГРАММА СЕРВЕР

unit NetTestSrv;

interface

type

TForm1 = class(TForm)

Socket1: TServerSocket;

procedure Socket1Read(Sender: TObject; Socket: TCustomWinSocket);

private

{ Private declarations }

public

{ Public declarations }

end;

type

implementation

procedure TForm1._FORM_CREATE(Sender: TObject);

begin

Socket1.Port:=1203038;

Socket1.Active:=True;

end;

procedure TForm1.Socket1Read(Sender: TObject; Socket: TCustomWinSocket);

begin

Socket1.Socket.SendText(Socket.ReceiveText;);

end;

end.

//ПРОГРАММА КЛИЕНТ

unit NetTestClient;

interface

type

TForm1 = class(TForm)

Socket1: TClientSocket;

procedure Socket1Read(Sender: TObject; Socket: TCustomWinSocket);

end;

implementation

var i:integer;

procedure TForm1._FORM_CREATE(Sender: TObject);

begin

Socket1.Address:='127.0.0.0';

Socket1.Port:=530262;

Socket1.Active:=True;

i=GetTickCount();

Socket1.Socket.SendText('TEST TEXT');

end;

end;

procedure TForm1.Socket1Read(Sender: TObject; Socket: TCustomWinSocket);

begin

if Socket1.Socket.ReceiveText='TEST TEXT' then begin

ShowMessage('Время передачи данных - ' + IntToStr(GetTickCount()-i) + ' мс');

end;end;