Лекция: Составьте программу для определения скорости передачи информации по сети одной ЭВМ к другой.
#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;
Билет 18