- •Часть 1
- •Серверное приложение:
- •Клиентское приложение:
- •Серверное приложение:
- •Клиентское приложение:
- •Серверное приложение:
- •Клиентское приложение:
- •Серверное приложение:
- •Клиентское приложение:
- •Клиентское приложение:
- •Часть 2
- •Interframe gap, jam-последовательность, slot time, collision window – назначение и расчет
- •Список использованной литературы.
Часть 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;
}