1 / 1 / 0
Регистрация: 06.03.2016
Сообщений: 10
1

Написание простейшего C++ сервера для исполнения команд

31.12.2016, 16:47. Показов 3445. Ответов 3

Мне нужно написать сервер на плюсах для получения, обработки и ответа на текстовые команды.

Т.е я буду посылать серверу запрос с клиента (на другом языке) например с текстом "ping" + ip клиента и должен получить от него ответ "pong" + время ответа.

Хотелось бы получить код с пояснениями. Спасибо.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.12.2016, 16:47
Ответы с готовыми решениями:

Написание простейшего сервера
Здравствуйте, погуглил, поискал по форумам, но не нашел, как сделать, чтобы можно было подключиться...

Написание простейшего драйвера для Windows
Всем привет, вопрос про написание простейшего драйвера для винды. Мне по учебе в вузе ещё вчера...

Написание программы для выполнение команд в терминале
Всем привет. Возможно уже такое было на форуме. Время от времени юзаю Ubuntu 16.04. Хотелось бы...

Автоматизация исполнения команд в консоли
Доброго времени суток. Столкнулся с проблемой следующего характера: 1. Система Linux CentoS 5...

3
nd2
3433 / 2812 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
31.12.2016, 17:36 2
Лучший ответ Сообщение было отмечено AndreykaMrPvP как решение

Решение

https://www.cyberforum.ru/cpp-networks/
1
1 / 1 / 0
Регистрация: 06.03.2016
Сообщений: 10
31.12.2016, 18:04  [ТС] 3
Спасибо. Искал в разделе C++ и не додумался залезть в этот подраздел)
0
1 / 1 / 0
Регистрация: 06.03.2016
Сообщений: 10
31.12.2016, 18:14  [ТС] 4
Появился ещё вопрос.

Когда отправляю серверу запрос, то он выводит кучу лишних символов (на скрине ниже), а при отключении - вообще начинается дикий флуд предыдущим сообщением. Что делать?

Код сервера:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <WinSock2.h>
#pragma comment(lib,"Ws2_32.lib")
#include <iostream>
#include<WS2tcpip.h>
 
 
 
SOCKET Connect;
SOCKET* Connections;
SOCKET Listen;
 
int ClientCount = 0;
using namespace std;
 
void SendMessageToClient(int ID)
{
    char* buffer = new char[1024];
    for (;; Sleep(75))
    {
        if (recv(Connections[ID], buffer, 1024, NULL))
        {
            cout << buffer << endl;
            for (int i = 0; i <= ClientCount; i++)
            {
                send(Connections[i], buffer, 1024, NULL);//send(Connections[i], buffer, strlen(buffer), NULL);
 
            }
        }
    }
    delete[] buffer;
    memset(&buffer, 0, sizeof(buffer));
}
 
 
int main()
{
    setlocale(LC_ALL, "Russion");
    WSAData data;
    WORD version = MAKEWORD(2, 2);//задаем версию
    int res = WSAStartup(version, &data);//инициали сокеты
    if (res != 0)
    {
        return 0;
    }
 
    struct addrinfo hints;
    struct addrinfo *result;
 
 
    Connections = (SOCKET*)calloc(64, sizeof(SOCKET));//иниц сокетов пользователей
 
    ZeroMemory(&hints, sizeof(hints));//очистка
 
                                      //настройка сокеты
    hints.ai_family = AF_INET;
    hints.ai_flags = AI_PASSIVE;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;
    //получ инф о сервере
    getaddrinfo(NULL, "25555", &hints, &result);
    //настраиваем сокет Listen, и проводим настройку сервера
    Listen = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
    bind(Listen, result->ai_addr, result->ai_addrlen);
    listen(Listen, SOMAXCONN);
 
 
    freeaddrinfo(result);
 
    cout << "Start server....";
    char m_connect[] = "\nYou are connect";
    //цикл обработки клиентов
    for (;; Sleep(75))
    {
        //подключение клиентов
        if ((Connect = accept(Listen, NULL, NULL)))
        {
            cout << "Client connect" << endl;
            Connections[ClientCount] = Connect;
            send(Connections[ClientCount], m_connect, strlen(m_connect), NULL);
            ClientCount++;
            CreateThread(NULL, 1024, (LPTHREAD_START_ROUTINE)SendMessageToClient, (LPVOID)(ClientCount - 1), NULL, NULL);
        }
    }
    return 1;
}
Миниатюры
Написание простейшего C++ сервера для исполнения команд  
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.12.2016, 18:14
Помогаю со студенческими работами здесь

Написание простейшего TCP\ip клиента ...
начал изучение кодинга tcp\ip ... качнул книгу и столкнулся с такой вот бедой ... есть код: ...

Что будет после исполнения команд
Что будет после исполнения команд a:=20 mod 6/2; b:=18/(a/2); c:='!'; d:='значениесуммыравно';...

Вывод всех команд для сервера в отдельный класс
Есть множество команд сервера, запрос которых выглядит следующим образом: &quot;Имя команды&quot; + IPacket...

Покажите пример простейшего сервера
Сервер должен слушать определённый порт, принимать данные обрабатывать и отправлять обратно. И...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru