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

Часть 1

Задача №1

Осуществить взаимодействие клиента и сервера на основе протокола TCP/IP. Функционирование клиента и сервера реализовать следующим образом: клиент посылает слово серверу, сервер возвращает назад в обратном порядке следования букв это слово клиенту.

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

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

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

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

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

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

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

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

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

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

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

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

// Запускаем бесконечный цикл сервера

// Структура определяет удаленный адрес, с которым соединяется сокет

// Открытие сокета для запроса клиента

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

// Возвращаем строку в обратнм порядке

// Посылает данные на соединенный сокет

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#define _CRT_SECURE_NO_DEPRECATE 1

#include <iostream>

#include <string>

#include <algorithm>

#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);

WSAStartup(wVersionRequested, &wsaData);

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

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

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

struct sockaddr_in local;

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

local.sin_family = AF_INET;

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

local.sin_port = htons(1280);

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

local.sin_addr.s_addr = htonl(INADDR_ANY);

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

int c = bind(s,(struct sockaddr*)&local, sizeof(local));

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

int r = listen(s, 5);

// Запускаем бесконечный цикл сервера

while (true) {

char b[255];

// Структура определяет удаленный адрес, с которым соединяется сокет

sockaddr_in remote_addr;

int size = sizeof(remote_addr);

// Открытие сокета для запроса клиента

SOCKET s2 = accept(s, (struct sockaddr*)&remote_addr, &size);

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

while (recv(s2, b, sizeof(b), 0) != 0) {

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

string str(b);

reverse(str.begin(),str.end());

// Посылает данные на соединенный сокет

send(s2, str.c_str(), str.length() + 1, 0);

}

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

closesocket(s2);

}

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

WSACleanup();

return 0;

}