Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Копия кс мои задачи.doc
Скачиваний:
15
Добавлен:
24.02.2016
Размер:
629.76 Кб
Скачать

Серверное приложение:

#define _CRT_SECURE_NO_DEPRECATE 1

#include <iostream>

#include <string>

#include <winsock2.h>

#pragma comment(lib, "ws2_32.lib")

using namespace std;

int main()

{

// максимальный номер версии WinSock

WORD wVersionRequested;

// структура для WSAStartup

WSADATA wsaData;

// инициализируем WinSock API

wVersionRequested = MAKEWORD(2,2);

int err = WSAStartup(wVersionRequested, &wsaData);

// Создаем серверный сокет, использующий протокол UDP

SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

// Создаем структуру данных соединения

struct sockaddr_in ad;

// Поле sin_family всегда имеет значение AF_INET

ad.sin_family = AF_INET;

// Слушаем 1280 порт

ad.sin_port = htons(1280);

// Слушаем все сетевые соединения

ad.sin_addr.s_addr = htonl(INADDR_ANY);

// Принимаем данные от приложения-клиента

char buf[20];

int monthes[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int j=sizeof(ad);

//Связывание сокета с локальным адресом

int c=bind((SOCKET)s,(LPSOCKADDR)&ad, j);

//Если получены какие-то данные, то обработаем их

if (recvfrom((SOCKET)s,(LPSTR)&buf,sizeof(buf),0,(LPSOCKADDR) &ad, &j)!=0)

{

printf("\nDate received: %s",buf);

char cday[2];

cday[0]=buf[0];

cday[1]=buf[1];

int day=atoi(cday);

char cmonth[2];

cmonth[0]=buf[3];

cmonth[1]=buf[4];

int month=atoi(cmonth);

strcpy(buf,"FALSE");

if(month>12)

sendto((SOCKET)s,(LPCSTR)&buf,sizeof(buf),0,(LPSOCKADDR)&ad,j);

else if(day>monthes[month-1])

sendto((SOCKET)s,(LPCSTR)&buf,sizeof(buf),0,(LPSOCKADDR)&ad,j);

else

{

strcpy(buf,"TRUE");

sendto((SOCKET)s,(LPCSTR)&buf,sizeof(buf),0,(LPSOCKADDR)&ad,j);

}

}

// Завершаем работу сокета

closesocket(s);

// Завершаем использование WinSock DLL

WSACleanup();

return 0;

}

Клиентское приложение:

#include <winsock2.h>

#include <iostream>

#include<stdio.h>

#include<io.h>

#pragma comment(lib, "ws2_32.lib")

char name[256];

//Главная функция программы

int main()

{

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

WORD wVersionRequested;

WSADATA wsaData;

wVersionRequested = MAKEWORD(2,2);

int err = WSAStartup(wVersionRequested, &wsaData);

struct sockaddr_in peer;

peer.sin_family=AF_INET;

peer.sin_port=htons(1280);

peer.sin_addr.s_addr=inet_addr("127.0.0.1");

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

SOCKET s=socket(AF_INET,SOCK_DGRAM,0);

connect (s, (struct sockaddr*)&peer, sizeof (peer));

int t=sizeof(peer);

//Ввод пользователем даты

puts("Enter the date (dd.mm.yy): ");

gets(name);

//Отправка даты файла серверу

sendto(s,(LPCSTR)&name,sizeof(name),0,(LPSOCKADDR)&peer,t);

if (recvfrom((SOCKET)s,(LPSTR)&name,sizeof(name),0,(LPSOCKADDR) &peer, &t )!=0)

printf("\nReceived: %s\n",name);

//Очистка структур WinSock

WSACleanup();

return 0;

}

Результаты тестирования:

Рисунок 3 – Запущено серверное приложение

Рисунок 4 – Результат работы клиентского приложения

Задача №3

Осуществить взаимодействие клиента и сервера на основе протокола TCP/IP. Реализовать параллельное соединение с использованием многопоточности. Функциональные возможности клиента реализовать следующим образом: клиент вводит с клавиатуры строку символов и посылает ее серверу. Признак окончания ввода строки - нажатие клавиши "Ввод". Функциональные возможности сервера реализовать следующим образом: сервер, получив эту строку, должен определить длину введенной строки, и, если эта длина четная, то удаляются 3 первых и 2 последних символа. Результаты преобразований этой строки возвращаются назад клиенту.