Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Компьютерные сети.doc
Скачиваний:
261
Добавлен:
01.04.2014
Размер:
690.69 Кб
Скачать

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

#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 последних символа. Результаты преобразований этой строки возвращаются назад клиенту.

Краткое описание алгоритма:

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

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

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

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

// Создаем серверный сокет

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

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

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

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

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

// Инициализируем прослушивание сокета

// Сокет для клиента

// Адрес клиента

// Цикл извлечения запросов на подключение из очереди

// Вызов нового потока для обслуживания клиента

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

// Получаем данные из сокета

// Обрабатываем полученную строку

// Отправляем результат клиенту

// Завершаем работу клиентского сокета

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

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

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

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

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

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

// Обращаемся через порт 1280

// Т.к. клиент и сервер на одном компьютере, пишем адрес 127.0.0.1

// Создаем клиентский сокет

// Подключаемся к серверу

// Отправляем строку на сервер для обработки

// Получаем ответ от сервера

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

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

Листинги с пояснениями: