Расчет конфигурации сети Ethernet
Автор: SergeiHeoN • Октябрь 14, 2018 • Контрольная работа • 7,197 Слов (29 Страниц) • 546 Просмотры
Министерство образования Республики Беларусь
Учреждение образования
Белорусский государственный университет информатики и
радиоэлектроники
Кафедра экономической информатики
КОНТРОЛЬНАЯ РАБОТА
по дисциплине: «Компьютерные сети»
на тему: «Расчет конфигурации сети Ethernet»
Вариант 1
Минск 2009
Часть 1
Задача 1.
Осуществить взаимодействие клиента и сервера на основе протокола TCP/IP. Функционирование клиента и сервера реализовать следующим образом: клиент посылает два числа серверу и одну из математических операций: "*", "/", "+", "-" ,- сервер соответственно умножает, делит, складывает либо вычитает эти два числа и ответ посылает ответ назад клиенту.
Нам необходимо написать две программы серверную и клиентскую.
В серверной программе инициализируем WinSock API, используя функцию WSAStartup. Создаем сокет, использующий протокол TCP, при помощи функции socket. Устанавливаем сокету адрес и порт, используя функцию bind. Далее ожидаем установки соединения с клиентом, для чего используем функцию listen. После прихода с клиента предложения о соединении, принимаем его, используя функцию accept. И начинаем принимать данные с клиента, используя функцию recv. Принятые данные обрабатываем, исходя из условия задачи, и отсылаем результат обработки, используя функцию send. В конце программы закрываем сокет, при помощи функции closesocket, и прекращаем работу WinSock API, используя функцию WSACleanup.
В клиентской программе инициализируем WinSock API, используя функцию WSAStartup. Создаем сокет, использующий протокол TCP, при помощи функции socket. Устанавливаем соединение с сервером, используя функцию connect. Считываем данные с потока входа, при помощи функции std::cin.getline, и отсылаем их на сервер, используя функцию send. Получаем результат с сервера, используя функцию recv, и выводим его на экран, посредством функции std::cout. В конце программы закрываем сокет, при помощи функции closesocket, и прекращаем работу WinSock API, используя функцию WSACleanup.
#include
#include
#include
#include
#pragma comment(lib,"Ws2_32.lib")
int main() {
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested=MAKEWORD(2,2);
WSAStartup(wVersionRequested,&wsaData);
SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in local;
local.sin_family=AF_INET;
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 res[255],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) {
int i1 = 0;
int i2 = 0;
if (strchr(b, '+') != 0) {
i1 = atoi(strtok(b, "+"));
i2 = atoi(strtok(0, "+"));
itoa(i1 + i2, res, 10);
} else if (strchr(b, '-') != 0) {
i1 = atoi(strtok(b, "-"));
i2 = atoi(strtok(0, "-"));
itoa(i1 - i2, res, 10);
} else if (strchr(b, '*') != 0) {
i1 = atof(strtok(b, "*"));
i2 = atof(strtok(0, "*"));
itoa(i1 * i2, res, 10);
} else if (strchr(b, '/') != 0) {
i1 = atof(strtok(b, "/"));
i2 = atof(strtok(0, "/"));
itoa(i1 / i2, res, 10);
}
// Посылает данные на соединенный сокет
send(s2,res,sizeof(res)-2,0);
}
closesocket(s2);
...