Контрольная работа по "Компьютерные сети"
Автор: Снежанна Иванова • Сентябрь 25, 2018 • Контрольная работа • 15,496 Слов (62 Страниц) • 770 Просмотры
Министерство образования республики Беларусь
Учреждение образования
«БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ»
Институт информационных технологий
Специальность Информационные системы и технологии в экономике
КОНТРОЛЬНАЯ РАБОТА
По курсу Компьютерные сети
Вариант № 16
Минск, 2016
Часть 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
#pragma comment(lib,"Ws2_32.lib")
int main() {
setlocale(LC_ALL, "Russian");
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(2, 2);
WSAStartup(wVersionRequested, &wsaData);
struct sockaddr_in peer;
peer.sin_family = AF_INET;
peer.sin_port = htons(1280);
// т.к. клиент и сервер на одном компьютере,
// пишем адрес 127.0.0.1
peer.sin_addr.s_addr = inet_addr("127.0.0.1");
SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
connect(s, (struct sockaddr*) &peer, sizeof(peer));
char buf[255], b[255];
std::cout << "Введите два числа и математическую операцию (+, -, *, или /)
между ними.\n Например: 2+2" << std::endl;
std::cin.getline(buf, 100, '\n');
send(s, buf, sizeof(buf), 0);
if (recv(s, b, sizeof(b), 0) != 0) {
b[strlen(b)] = '\0'; //Удаление ненужных символов
// в конце строки
std::cout << b << std::endl;
std::cin.get();
}
closesocket(s);
WSACleanup();
return 0;
}
#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);
...