Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Создание последовательного сервера с установлением логического соединения (TCP/IP)

Автор:   •  Декабрь 4, 2020  •  Лабораторная работа  •  390 Слов (2 Страниц)  •  609 Просмотры

Страница 1 из 2

Индивидуальное задание

Цель работы – изучить методы создания серверов, используя алгоритм последовательной обработки запросов.

Задание. Осуществить взаимодействие клиента и сервера на основе протокола 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))

{

...

Скачать:   txt (4.8 Kb)   pdf (51.5 Kb)   docx (11.1 Kb)  
Продолжить читать еще 1 страницу »
Доступно только на Essays.club