Создание последовательного сервера с установлением логического соединения (TCP/IP)
Автор: Юля Босько • Декабрь 4, 2020 • Лабораторная работа • 390 Слов (2 Страниц) • 703 Просмотры
Индивидуальное задание
Цель работы – изучить методы создания серверов, используя алгоритм последовательной обработки запросов.
Задание. Осуществить взаимодействие клиента и сервера на основе протокола TCP/IP. Функционирование клиента и сервера реализовать следующим образом: клиент посылает два числа серверу m и n, сервер возвращает m!+n! этих чисел назад клиенту.
Код программы:
Сервер:
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#include <winsock2.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <string>
#include <conio.h>
using namespace std;
int fact(int);
int main()
{
setlocale(LC_ALL, "RUS");
WORD wVersionRequested; (максимальный номер версии WinSock)
WSADATA wsaData;(структура для WSAStartup)
wVersionRequested = MAKEWORD(2, 2); (bинициализация)
WSAStartup(wVersionRequested, &wsaData);
struct sockaddr_in local;(создаем структуру данных соединения)
local.sin_family = AF_INET;
local.sin_port = htons(1280);
local.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
SOCKET s = socket(AF_INET, SOCK_STREAM, 0); (создаем серверный сокет)
if (s == 0)
{
puts("ERROR\n");
return 0;
}
int c = bind(s, (struct sockaddr*)&local, sizeof(local));(связываем сокет с соединением)
int r = listen(s, 5); (инициализируем прослушивание сокета)
int vvod;
do{
cout << "Соединение с клиентом... Соединение установлено!" << endl << endl;
cout << "Данные N и M приняты" << endl;
while (true)( запускаем бесконечный цикл сервера)
{
char buf[255], res[100], b[255], *Res;
//структура определяет удаленный адрес,
//с которым соединяется сокет
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)
{
char *n, *m, *tk, Res[10];
tk = strtok(b, " "); (разделение строки на лексемы)
int length = strlen(tk);
n = new char[length]; ( выделение памяти)
strcpy(n, tk);
m = new char[100];
int count = 1;
while ((tk != NULL) && (count == 1))
{
...