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

Клієнт

Читайте также:
  1. Додавання нової фізичної особи в базу даних.
  2. Додавання нової юридичної особи в базу даних.
  3. Дослідження роботи служб SMTP та POP3
  4. Ком) і позичальником (клієнтом) щодо балансування їх економічних
  5. Примітка
  6. ПРОБЛЕМНА СИТУАЦІЯ « ХТО ВИНЕН?»
  7. Роланд приймає ліки
  8. Складні випадки використання великої літери в документах
  9. Форми арт-терапевтичної роботи

 

#include "stdafx.h"

#include <stdio.h>

#include <iostream.h>

#include <string.h>

#include <math.h>

#include <winsock2.h>

#include <windows.h>

 

 

#define PORT 666

 

 

int main(int argc, char* argv[])

{

char buff[1024];

printf("LAN TEST CLIENT\n");

 

while(true){

printf("ENTER SERVER IP-ADDRESS(type quit for exit):");

char ip[20];

cin>>ip;

if(!strcmp(ip,"quit"))

break;

 

 

// инициализация библиотеки Winsock

if (WSAStartup(0x202,(WSADATA *)&buff[0]))

{

printf("WSAStart error %d\n",WSAGetLastError());

return -1;

}

 

// создание сокета

SOCKET my_sock;

my_sock=socket(AF_INET,SOCK_STREAM,0);

if (my_sock < 0)

{

printf("Socket() error %d\n",WSAGetLastError());

return -1;

}

 

// установка соединения

// заполнение структуры sockaddr_in

// указание адреса и порта сервера

sockaddr_in dest_addr;

dest_addr.sin_family=AF_INET;

dest_addr.sin_port=htons(PORT);

HOSTENT *hst;

 

// преобразование IP адреса из символьного в

// сетевой формат

if (inet_addr(ip)!=INADDR_NONE)

dest_addr.sin_addr.s_addr=inet_addr(ip);

else

// попытка получить IP адрес по доменному

// имени сервера

if (hst=gethostbyname(ip))

// hst->h_addr_list содержит не массив адресов,

// а массив указателей на адреса

((unsigned long *)&dest_addr.sin_addr)[0]=

((unsigned long **)hst->h_addr_list)[0][0];

else

{

printf("Invalid address %s\n",ip);

closesocket(my_sock);

WSACleanup();

return -1;

}

 

// адрес сервера получен – пытаемся установить

// соединение

if (connect(my_sock,(sockaddr *)&dest_addr,

sizeof(dest_addr)))

{

printf("Connect error %d\n",WSAGetLastError());

return -1;

}

 

printf("Connection to %s established\n\n",ip);

 

 

//Передаваемые данные

char data[600];

 

int nsize;

//Переменные для вычисления времени

__int64 start;

__int64 end;

__int64 freq;

//Получаем частоту счетчика

QueryPerformanceFrequency((LARGE_INTEGER*)&freq);

//Массив для хранения времени каждой посылки

double diff[5];

//Отправление и получение сообщения, не влияющего на результат теста.

//Применяется, т.к. первое сообщение отправляется/получается долго, что

//искажает результаты

send(my_sock,&data[0],sizeof(data),0);

nsize=recv(my_sock,&buff[0], sizeof(buff)-1,0);

//цикл отправки сообщений для теста

for(int i=0;i<5;i++){

// запоминаем значение счетчика перед передачей

QueryPerformanceCounter((LARGE_INTEGER*)&start);

//отправляем сообщение

send(my_sock,&data[0],sizeof(data),0);

//получаем ответ

if((nsize=recv(my_sock,&buff[0],

sizeof(buff)-1,0))

!=SOCKET_ERROR){

//запоминаем время приема

QueryPerformanceCounter((LARGE_INTEGER*)&end);

//Вычисляем время приема/передачи в микросекундах

diff[i]=ceil((double)(end-start)/(double)freq*1000000);

cout<<"Elapsed time:"<<(DWORD)freq<<"="<<diff[i]<<"mks"<<endl;

 

}

 

}

 

//Подсчитываем среднее значение времени

double av=0;

for(i=0;i<5;i++)

av+=diff[i];

cout<<"Testing is finished. Average time:"<<ceil(av/5)<<"mks"<<endl<<endl<<endl;

 

closesocket(my_sock);

WSACleanup();

 

 

}

return -1;

}

 

 


1 | 2 |

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



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