Создание последовательного сервера с установлением логического соединения TCP
Автор: lisolinda • Ноябрь 21, 2023 • Лабораторная работа • 1,815 Слов (8 Страниц) • 93 Просмотры
Создание последовательного сервера с установлением логического соединения TCP
Цель работы: изучить методы создания серверов с установлением логического соединения TCP, используя алгоритм последовательной обработки запросов.
Индивидуальное задание:
Серверная часть:
//СЕРВЕР
#include "stdafx.h"
#include<iostream>
#include<winsock2.h>
#include<string>
#include<stdio.h>
#pragma comment(lib, "Ws2_32.lib");
using namespace std;
int main() {
WORD sockVer;
WSADATA wsaData;
int retVal;
sockVer = MAKEWORD(2, 2);
WSAStartup(sockVer, &wsaData);//функция для использования интерфейса WinSock
//Создаем сокет
SOCKET servSock = socket(AF_INET, SOCK_STREAM, 0);
if (servSock == INVALID_SOCKET) {
cout<<"Unable to create socket\n";
getchar();
WSACleanup();
return SOCKET_ERROR;
}
struct sockaddr_in local;
local.sin_family = AF_INET;
local.sin_port = htons(1280);
local.sin_addr.s_addr = INADDR_ANY;
retVal = bind(servSock, (struct sockaddr*)&local, sizeof(local));//связывание сокета с адресом
if (retVal == SOCKET_ERROR) {
cout << "Unable to bind\n";
WSACleanup();
return SOCKET_ERROR;
}
//Пытаемся начать слушать сокет
retVal = listen(servSock, 5);
if (retVal == SOCKET_ERROR) {
printf("Unable to listen\n");
WSACleanup();
return SOCKET_ERROR;
}
//Ждем клиента
SOCKET clientSock;
clientSock = accept(servSock, NULL, NULL);//открытие соединения
if (clientSock == INVALID_SOCKET) {
printf("Unable to accept\n");
WSACleanup();
return SOCKET_ERROR;
}
while (true) {
char buf[255] = "";
retVal = recv(clientSock, buf, 255, 0);//прием данных
if (retVal == SOCKET_ERROR) {
printf("Unable to recv\n");
return SOCKET_ERROR;
}
std::string cl = buf;
size_t found = cl.find_first_of(" ");
char buffer[50];
int nums[50], p = 0;
while (found != std::string::npos) {
found = cl.find_first_of(" ", 0);
std::size_t length = cl.copy(buffer, found, 0);
cl.erase(0, found + 1);
nums[p++] = std::stoi(buffer);
}
int c = 0;
...