Читайте также:
|
|
// пример простого UDP-клиента
#include <vcl.h>
#pragma hdrstop
#pragma argsused
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <winsock2.h>
#include <windows.h>
#include <math.hpp>
#include "winbase.h"
#define PORT 666
int main(int argc, char* argv[])
{
char* SERVERADDR="127.0.0.1";
char buff[10 * 1014];
LARGE_INTEGER m_sw_freq,counter1,counter2;
QueryPerformanceFrequency(&m_sw_freq);//инициализация таймера
printf("UDP CLIENT\nType quit to quit\n");
// Шаг 1 - иницилизация библиотеки Winsocks
if (WSAStartup(0x202, (WSADATA *)&buff[0]))
{
printf("WSAStartup error: %d\n", WSAGetLastError());
printf("Press any key for exit...");
getch();
return -1;
}
// Шаг 2 - открытие сокета
SOCKET my_sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (my_sock == INVALID_SOCKET)
{
printf("socket() error: %d\n", WSAGetLastError());
WSACleanup();
printf("Press any key for exit...");
getch();
return -1;
}
// Шаг 3 - обмен сообщений с сервером
HOSTENT *hst;
sockaddr_in dest_addr;
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(PORT);
// ввод IP адресса сервера
printf("Input Server UDP addr:");
gets(SERVERADDR);
// определение IP-адреса узла
if (inet_addr(SERVERADDR)!= INADDR_NONE)
dest_addr.sin_addr.s_addr = inet_addr(SERVERADDR);
else
{
if (hst = gethostbyname(SERVERADDR))
dest_addr.sin_addr.s_addr = ((unsigned long **) hst->h_addr_list)[0][0];
else
{
printf("Unknown host: %d\n", WSAGetLastError());
closesocket(my_sock);
WSACleanup();
printf("Press any key for exit...");
getch();
return -1;
}
}
while (1)
{
// чтение сообщения с клавиатуры
printf("S<=C: "); fgets(&buff[0], sizeof(buff) - 1, stdin);
if (!strcmp(&buff[0], "quit\n")) break;
QueryPerformanceCounter(&counter1);//чтение начального системного времени
// Передача сообщений на сервер
sendto(my_sock, &buff[0], strlen(&buff[0]), 0, \
(sockaddr *)&dest_addr, sizeof(dest_addr));
// Прием сообщения с сервера
sockaddr_in server_addr;
int server_addr_size = sizeof(server_addr);
int n = recvfrom(my_sock, &buff[0], sizeof(buff) - 1, 0, \
(sockaddr *)&server_addr, &server_addr_size);
QueryPerformanceCounter(&counter2);//чтение конечного системного времени
if (n == SOCKET_ERROR)
{
printf("recvfrom() error: %d\n", WSAGetLastError());
closesocket(my_sock);
WSACleanup();
printf("Press any key for exit...");
getch();
return -1;
}
buff[n] = 0;
// Вывод принятого с сервера сообщения на экран
printf("S=>C:%s", &buff[0]);
printf("time request: %s ms\n",
FloatToStr(RoundTo(double(counter2.QuadPart-counter1.QuadPart)*1000/double(m_sw_freq.QuadPart),-3)));
}
// Шаг последний - выход
closesocket(my_sock);
WSACleanup();
return 0;
}
Дата добавления: 2014-12-18; просмотров: 26 | Поможем написать вашу работу | Нарушение авторских прав |