Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/75: Рейтинг темы: голосов - 75, средняя оценка - 4.93
2 / 2 / 1
Регистрация: 18.11.2015
Сообщений: 104

Передача сообщений через pipe

09.11.2018, 17:24. Показов 15270. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прошу помочь с реализацией курсового проекта. Я очень плохо шарю в c++, поэтому ничего не могу понять( Нужно через pipe реализовать следующие задачи:
В одномерном массиве, состоящем из η вещественных элементов, вычислить:
1) максимальный элемент массива;
2) сумму элементов массива, расположенных до последнего положительного эле¬мента.
Сжать массив, удалив из него все элементы, модуль которых находится в интервале [а,b]. Освободившиеся в конце массива элементы заполнить нулями.
Сложность в том, что нужно создать два консольных приложения client и server.
Client отправляет массив, server получает его, обрабатывает и отправляет клиенту ответ.
Заранее спасибо всем, кто поможет или хотя бы попытается)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.11.2018, 17:24
Ответы с готовыми решениями:

Передача больших сообщений
Проблема состоит в том что сервер принимает структуру в структуре есть поле char a; оно передается нормально некоторое время, а потом...

Передача сообщений между клиентами
Всем привет! Пытаюсь написать программу для передачи сообщений между клиентами (пример взят из статьи "Самоучитель игры на...

Передача координат транспорта в виде коротких сообщений
Разработать программу передачи координат транспорта г Москвы в виде коротких сообщений, обеспечивающих минимальный трафик. Для этого ввести...

8
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
11.11.2018, 19:50
vany200397, вы про собственно pipe читали? Мысли есть?
0
2 / 2 / 1
Регистрация: 18.11.2015
Сообщений: 104
11.11.2018, 19:51  [ТС]
Я уже решил задачу. Можно закрывать, спасибо
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
12.11.2018, 06:26
vany200397, это оч хорошо, остальным покажете во имя добра)?
0
2 / 2 / 1
Регистрация: 18.11.2015
Сообщений: 104
12.11.2018, 07:22  [ТС]
Лучший ответ Сообщение было отмечено vxg как решение

Решение

Конечно)

Клиент:
C++ (Qt)
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
86
87
88
89
90
91
92
93
94
95
96
97
98
// gClient.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
  TCHAR   pipeName[80] = L"\\\\.\\pipe\\demo_pipe";
  HANDLE   hNamedPipe;
  DWORD   dwBytesWritten;    // для количества записанных байтов
  DWORD   dwBytesRead;       // для количества прочитанных байтов
  double     pchMessage[5] = {};   // для сообщения
  int    nMessageLength;     // длина сообщения
  char  pchResponse[80];
  
  // связываемся с именованным каналом
  hNamedPipe = CreateFile(
    pipeName,          // имя канала
    GENERIC_READ | GENERIC_WRITE,       // читаем и записываем в канал
    FILE_SHARE_READ | FILE_SHARE_WRITE, // разрешаем чтение и запись 
    NULL,                  // безопасность по умолчанию
    OPEN_EXISTING,         // открываем существующий канал
    FILE_ATTRIBUTE_NORMAL, // атрибуты по умолчанию
    NULL);                 // дополнительных атрибутов нет
  
  // проверяем связь с каналом
  if (hNamedPipe==INVALID_HANDLE_VALUE)
  {
    cerr << "Connection with the named pipe failed." << endl
      << "The last error code: " << GetLastError() << endl;
    cout << "Press any key to exit.";
    cin.get();
 
    return 0;
  }
 
  // вводим строку
  cout << "Input an array: ";
  for (int i=0; i<5; i++)
  { 
    cin>>pchMessage[i];
  }
  nMessageLength=sizeof(pchMessage)+1;
  //cout << nMessageLength<< endl;
  // пишем в именованный канал
  if (!WriteFile(
    hNamedPipe,      // дескриптор канала
    pchMessage,      // данные
    nMessageLength,  // размер данных
    &dwBytesWritten, // количество записанных байтов
    NULL))           // синхронная запись
  {
    // ошибка записи
    cerr << "Write file failed: " << endl
      << "The last error code: " << GetLastError() << endl;
    CloseHandle(hNamedPipe);
    cout << "Press any key to exit.";
    cin.get();
 
    return 0;
  }
  // выводим посланное сообщение на консоль
  cout << "The client sent the message to a server: "<< endl;
     for (int i=0; i<5; i++)
  { 
    cout<<pchMessage[i]<< endl;
  }
  // читаем из именованного канала
  if (!ReadFile(
    hNamedPipe,      // дескриптор канала
    pchResponse,      // данные
    sizeof(pchResponse),  // размер данных
    &dwBytesRead,    // количество записанных байтов
    NULL))           // синхронное чтение
  {
    // ошибка чтения
    cerr << "Read file failed: " << endl
      << "The last error code: " << GetLastError() << endl;
    CloseHandle(hNamedPipe);
    cout << "Press any key to exit.";
    cin.get();
 
    return 0;
  }
  // выводим полученное сообщение на консоль
  cout << "The client received the message from a server: "
    << endl << '\t' << pchResponse << endl;
  // закрываем дескриптор канала
  CloseHandle(hNamedPipe);
  // завершаем процесс
  cout << "Press any key to exit.";
  cin.get();
 
  return 0;
}
Сервер:

C++ (Qt)
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
// gServer.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <math.h>
using namespace std;
bool wayToSort(double i, double j) { return i > j; }
int main()
{
  HANDLE   hNamedPipe;
  DWORD   dwBytesRead;     // для количества прочитанных байтов
  DWORD   dwBytesWrite;    // для количества записанных байтов
  double     pchMessage[5] = {};   // для сообщения
  int    nMessageLength;   // длина сообщения
  char  pchResponse[80];
  double arrsum = 0;
  double arrmult = 1;
  double arrminabs = DBL_MAX;
  double arrmaxabs = DBL_MIN;
  int iminabs;
  int imaxabs;
 
  // создаем именованный канал для чтения и записи
  hNamedPipe = CreateNamedPipe(
    L"\\\\.\\pipe\\demo_pipe",  // имя канала
    PIPE_ACCESS_DUPLEX,        // читаем из канала и пишем в канал
    PIPE_TYPE_MESSAGE | PIPE_WAIT,   // синхронная передача сообщений
    1,         // максимальное количество экземпляров канала 
    0,         // размер выходного буфера по умолчанию
    0,         // размер входного буфера по умолчанию
    INFINITE,  // клиент ждет связь бесконечно долго
    NULL       // безопасность по умолчанию
    );
  // проверяем на успешное создание
  if (hNamedPipe == INVALID_HANDLE_VALUE)
  {
    cerr << "Create named pipe failed." << endl
      << "The last error code: " << GetLastError() << endl;
    cout << "Press any key to exit.";
    cin.get();
 
    return 0;
  }
  
  // ждем, пока клиент свяжется с каналом
  cout << "The server is waiting for connection with a client." << endl;
  if(!ConnectNamedPipe(
    hNamedPipe,    // дескриптор канала
    NULL      // связь синхронная
    ))
  {
    cerr << "Connect named pipe failed." << endl
      << "The last error code: "<<GetLastError() << endl;
    CloseHandle(hNamedPipe);
    cout << "Press any key to exit.";
    cin.get();
 
    return 0;
  }
  // читаем сообщение от клиента
  if (!ReadFile(
    hNamedPipe,      // дескриптор канала
    pchMessage,      // адрес буфера для ввода данных
    sizeof(pchMessage),  // количество читаемых байтов
    &dwBytesRead,    // количество прочитанных байтов
    NULL))           // передача данных синхронная
  {
    cerr << "Data reading from the named pipe failed." << endl
      << "The last error code: "<< GetLastError() << endl;
    CloseHandle(hNamedPipe);
    cout << "Press any key to exit.";
    cin.get();
 
    return 0;
  }
 
  // выводим полученное от клиента сообщение на консоль
  sort(pchMessage,pchMessage+5,wayToSort);
  cout << "The server received the message from a client: "<< endl;
    for (int i=0; i<5; i++)
  { 
    cout<<pchMessage[i]<< endl;
    if (pchMessage[i]<0)
    {
        arrsum+=pchMessage[i];
    }
    if (abs(pchMessage[i])<arrminabs)
    {
        arrminabs=abs(pchMessage[i]);
        iminabs = i;
    }
    if (abs(pchMessage[i])>arrmaxabs)
    {
        arrmaxabs=abs(pchMessage[i]);
        imaxabs = i;
    }
  }
  if (imaxabs>iminabs)
    {
        swap(imaxabs,iminabs);
    }
   for (int i=imaxabs+1; i<iminabs; i++)
  {
      arrmult*=pchMessage[i];
  }
   sprintf_s(pchResponse, "%f", arrsum);
   nMessageLength = strlen(pchResponse) + 1;
  // cout<<pchResponse<< endl;
  // отвечаем клиенту
  if (!WriteFile(
    hNamedPipe,      // дескриптор канала
    pchResponse,      // адрес буфера для вывода данных
    nMessageLength,  // количество записываемых байтов
    &dwBytesWrite,   // количество записанных байтов
    NULL             // передача данных синхронная
    ))
  {
    cerr << "Write file failed." << endl
      << "The last error code: " << GetLastError() << endl;
    CloseHandle(hNamedPipe);
    cout << "Press any key to exit.";
    cin.get();
 
    return 0;
  }
 
  // выводим посланное клиенту сообщение на консоль
  cout << "The server sent the message to a client: "
    << endl << '\t' << pchResponse << endl;
 
  // закрываем дескриптор канала 
  CloseHandle(hNamedPipe);
  // завершаем процесс
  cout << "Press any key to exit.";
  cin.get();
 
  return 0;
}
2
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 12
22.05.2019, 12:05
можете рассказать как это сделать и где?
0
 Аватар для hebdo
-10 / 4 / 1
Регистрация: 20.05.2019
Сообщений: 16
22.05.2019, 13:47
Проще всего с Borland C++ 5.02, после установки, (если ОС x64 !!!) открыть консоль: Win+R,
дать команду: del c:\windows\system\bivbx31n.exe Команды (выполнять от Admina)
после этого поправить в настройках шрифт, чтобы русские отображались, запустить средства разработки из
этого пакета
Проект для Borland C++ 5.02.zip

Второй вариант установить Microsoft Visual C++
здесь версия для неё
Проект для Visual Studio (начиная с 6.0).zip
0
 Аватар для hebdo
-10 / 4 / 1
Регистрация: 20.05.2019
Сообщений: 16
22.05.2019, 14:08
сборка проекта Borland C++


сборка проекта Visual Stidio
0
22.05.2019, 15:29

Не по теме:

Как прекрасен winapi - посмотрииии

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.05.2019, 15:29
Помогаю со студенческими работами здесь

Конструкторы,передача сообщений объектам и реакции объектов на сообщения в С++
Привет всем! Тему чуть-чуть понимаю,но задачу сделать не могу, вы не могли бы мне помочь с этим? вот задача:Создаваемый объект должен...

Передача системного времени через pipe
Всем привет, пишу программу, дочерний процесс должен передать системное время родительскому процессу через pipe, но в чем-то ошибка. Буду...

Передача считанного файла через pipe
прошу помощи разобраться с чтением файла и передачей прочитанных данных через анонимный pipe сам смысл задачи:программа запускается из...

Передача данных дочернему процессу посредством pipe(): иммитация нажатия enter через терминал
Всем привет. Столкнулся с такой проблемой: есть программа, считывающая логин и пароль (последовательно, сначала логин, после ввода запрос...

Передача сообщений через TCP/IP
Доброго времени суток. При разработке программы, столкнулся с двумя типами логики приложения при передаче сообщения: 1) Connect -&gt;...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru