Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 21.04.2011
Сообщений: 92

Передача данных при помощи pipe

05.01.2012, 19:37. Показов 5503. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Смысл в том, что можно создать одно приложение (соответственно, один проект). При первом запуске приложение будет играть роль сервера, при втором – роль клиента. Помимо этого нужно обеспечить, чтобы прием сообщений шел параллельно с отправкой. Для осуществления последнего нужно использовать потоки. Тогда в основном потоке вы будете отправлять сообщения, а в дополнительном – «слушать» входящие сообщения и отображать их на экране.
У меня же два проекта. Помогите исправить.

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
//первый проект
#include <windows.h>
#include <stdio.h>
#include <conio.h>
BOOL fConnected;                                         // Флаг успешного создания канала
HANDLE hNamedPipe;                                       // Идентификатор канала Pipe
LPCWSTR lpszPipeName = L"\\\\.\\pipe\\$MyFirstPipe";     // Имя создаваемого канала 
char szBuf[512];                                         // Буфер для приема данных из канала
char message[256];                                       //сообщение
DWORD cbWritten;                                         // Количество байт, переданных через канал
DWORD cbRead;                                            // Количество байт данных, принятых через канал
 
int main()
{
// Создаем канал Pipe с именем lpszPipeName
hNamedPipe = CreateNamedPipe (
lpszPipeName, 
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,
PIPE_UNLIMITED_INSTANCES,
512,
512, 
5000, 
NULL );
 
// Если возникла ошибка, завершаем работу приложения
//
if (hNamedPipe == INVALID_HANDLE_VALUE)
{
    printf ("Error Pipe Creating!!!\n");
    getch();
    return 0;
}
 
// Ожидаем соединения со стороны клиента
fConnected = ConnectNamedPipe(hNamedPipe, NULL);
 
// Если возникла ошибка, завершаем работу приложения
//
if  (!fConnected)
{
    printf ("Error Pipe Connecting!!!\n");
    CloseHandle (hNamedPipe);
    getch();
    return 0;
}
 
// Получение данных из канала
//
while (true)
{
    if (ReadFile(hNamedPipe, szBuf, 512, &cbRead, NULL))
        printf ("Received %d bytes: <%s>\n", cbRead, szBuf);
    printf ("Input message \n");
    scanf  ("%s", message);
    strcpy (szBuf, message);
    if  (!WriteFile(hNamedPipe, szBuf, strlen(szBuf) + 1, &cbWritten, NULL))
        printf("Error Data Transfer!!!\n");     // Если произошла ошибка, выдаем сообщение
    else 
        printf("Transferred %d bytes: <%s>\n", cbWritten, szBuf);
}
 
CloseHandle (hNamedPipe);
getch();
return 0;
}
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
//второй проект
#include <windows.h>
#include <stdio.h>
#include <conio.h>
HANDLE hNamedPipe;                                   // Идентификатор канала Pipe
DWORD cbWritten;                                     // Количество байт, переданных через канал
char szBuf[256];                                     // Буфер для передачи данных
char message[256];                                   // Сообщение
DWORD cbRead;                                        // Количество байт данных, принятых через канал
LPCWSTR lpszPipeName = L"\\\\.\\pipe\\$MyFirstPipe"; // Имя создаваемого канала
 
int main()
{
    // Установка соединения с процессом PIPES
hNamedPipe = CreateFile (lpszPipeName, 
    GENERIC_READ | GENERIC_WRITE,
    0,
    NULL, 
    OPEN_EXISTING, 
    0, 
    NULL);
 
// Если возникла ошибка, завершаем работу приложения
//
if  (hNamedPipe == INVALID_HANDLE_VALUE) 
{
    printf("Error Pipe Creating!!!\n");
    getch();
    return 0;
}
 
// Передача данных 
//
while (true)
{
    printf ("Input message \n");
    scanf  ("%s", message);
    strcpy (szBuf, message);
    if  (!WriteFile(hNamedPipe, szBuf, strlen(szBuf) + 1, &cbWritten, NULL))
        printf("Error Data Transfer!!!\n");      // Если произошла ошибка, выдаем сообщение
    else 
        printf("Transferred %d bytes: <%s>\n", cbWritten, szBuf);
    if  (ReadFile(hNamedPipe, szBuf, 512, &cbRead, NULL))
        printf  ("Received %d bytes: <%s>\n", cbRead, szBuf);
}
CloseHandle (hNamedPipe);                // Закрываем идентификатор канала
getch();
return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.01.2012, 19:37
Ответы с готовыми решениями:

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

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

Передача файлов при помощи компонентов ServerSocket и ClientSpcket
Здравствуйте, можете скинуть исходники или точные примеры как передавать файлы при помощи компонентов ServerSocket &amp; ClientSpcket! Да...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.01.2012, 19:37
Помогаю со студенческими работами здесь

Передача сообщений через pipe
Прошу помочь с реализацией курсового проекта. Я очень плохо шарю в c++, поэтому ничего не могу понять( Нужно через pipe реализовать...

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

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

Получение данных при помощи ajax
В общем везде много написано про отсылку данных при помощи ajax... Но вот про получение что-то как-то не нарыл внятного... В общем по клику...

Реализация базы данных при помощи структур
Помогите написать программу!! 1.Создать базу данных для хранения следующей информации: – Ф.И.О., – должность, – оклад, ...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru