Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рустам-ВЛ
1 / 1 / 0
Регистрация: 06.10.2012
Сообщений: 45
#1

Межпрограммный обмен данными - C++

22.11.2012, 12:11. Просмотров 718. Ответов 10
Метки нет (Все метки)

Помогите сделать , чтобы при вводе в одной консоле(сервере) выдавала на другую консоль(клиент) текст
В данный момент этот код выдаёт только числа
Сервер
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
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include<conio.h>
#include<stdio.h>
#include<windows.h>
 
//---------------------------------------------------------------------------
// Программа иллюстрирует работу со специальным инструментом
// межпрограммного обмена данными - пайпами. Данная программа является
// сервером. Она создаёт пайп и ждёт присоединения к нему программы-клиента.
// После успешного соединения просит вводить текст и записывать их в пайп.
// Другая программа - клиент читает текст из пайпа и выдаёт их на консоль
#pragma argsused
int main(int argc, char* argv[])
{
char s[80];
int num;
unsigned long WriteCount;
HANDLE PipeHandle;
 
//Создаём пайп с именем Data_Ch. ВНИМАНИЕ! Для корректной интерпретации строки
// с именем вместо одного слеша ставим два!
PipeHandle = CreateNamedPipe("\\\\.\\pipe\\Data_Ch",PIPE_ACCESS_OUTBOUND,PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, 3, 10000, 10000, 5000, NULL);
if (INVALID_HANDLE_VALUE!=PipeHandle)
{
printf("Wait to connect...\n");
}
else
{
printf("Error!\n");
}
 
if (ConnectNamedPipe(PipeHandle, NULL))  // Ждём пока к пайпу присоединится клиент
{
printf("Connecting success!\n");
}
 
 
 
 
while (s[0]!='q')
{
printf("Input number: \n");
gets(s);
num = atoi(s);  //Вводим с консоли число и записываем его в пайп
WriteFile(PipeHandle, &num, sizeof(num), &WriteCount, NULL);
}
 
 
getch();
 
FlushFileBuffers(PipeHandle);
DisconnectNamedPipe(PipeHandle);
CloseHandle(PipeHandle);
 
        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
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include<conio.h>
#include<stdio.h>
#include<windows.h>
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
int num;
unsigned long ReadCount;
 
HANDLE PipeHandle;
 
//Присоединяемся к пайпу
PipeHandle = CreateFile("\\\\.\\pipe\\Data_Ch", GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, 0);
if (PipeHandle)
{
printf("Connecting success!\n");
}
else
{
printf("Error!\n");
}
 
 
do
{ //Читаем данные из пайпа
ReadFile(PipeHandle, &num, sizeof(num), &ReadCount, NULL);
printf("Number = %d\n", num);
}
while (ReadCount!=0);
 
printf("Disconnected...\n");
getch();
        return 0;
}
//---------------------------------------------------------------------------
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2012, 12:11     Межпрограммный обмен данными
Посмотрите здесь:

Обмен данными между процессами - C++
Уважаемое сообщество, подскажите, пожалуйста, с решением такой проблемы: у меня два процесса c# и с++, и мне необходимо передавать массив...

Обмен данными с ЭБУ через RS-232 - C++
Всем добра, уважаемые форумчане! Это мой первый пост, прошу сильно не ругать:) Итак, поехали: Задача- &quot;поговорить&quot; с ЭБУ через...

Обмен данными по COM порту на нестандартной скорости - C++
подскажите пожалуйста, как написать программу для обмена данными по COM порту на не стандартной скорости, например 10400бод.

Обмен данными GUI и шахматного движка - C++
Пишу GUI для работы с шахматным движком. Движок это exeшник принимающий команды, но как мне сделать возможным обмен данными между ними?

Обмен данными через файлы по локальной сети - C++
Пусть два .exe-шника при себе имеют файлы Input.txt и Output.txt, у каждого отдельная папка, к примеру Папка 1 и Папка 2. Существует обмен...

Обмен данными между 2 клиентами через интернет - C++
Пожалуйста, подробно опишите, как сделать обмен данных через интернет между клиентами. На с++, или на delphi код - не особо важно. Данные...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.11.2012, 12:26     Межпрограммный обмен данными #2
Сервер DDE, или OLE? Сетевые (как вариант, в зеркальной сети № 127) проги? Обмен через файл, отображаемый в память? Через простой файл?
Рустам-ВЛ
1 / 1 / 0
Регистрация: 06.10.2012
Сообщений: 45
22.11.2012, 12:42  [ТС]     Межпрограммный обмен данными #3
программы запускаются на одном компе запускаю только 2 turbo c++ и там по проекту


http://s1.********************/upload...89bf79f7af.jpg
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.11.2012, 12:45     Межпрограммный обмен данными #4
Цитата Сообщение от Рустам-ВЛ Посмотреть сообщение
программы запускаются на одном компе
читай:
Цитата Сообщение от taras atavin Посмотреть сообщение
как вариант, в зеркальной сети № 127
.
Рустам-ВЛ
1 / 1 / 0
Регистрация: 06.10.2012
Сообщений: 45
22.11.2012, 12:50  [ТС]     Межпрограммный обмен данными #5
Зеркальная сеть
Не знал, что это)
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.11.2012, 13:01     Межпрограммный обмен данными #6
Сеть № 127 - это специальная сеть, в которой все пакеты возвращаются отправителю, то есть на какой бы машине ты не сидел, в сети № 127 только она.

Добавлено через 1 минуту
В этой сети пакеты как бы отражаются от сетевухи, потому я и называю её зеркальной.

Добавлено через 25 секунд
Ни один из вариантов ты не исключил.
Рустам-ВЛ
1 / 1 / 0
Регистрация: 06.10.2012
Сообщений: 45
22.11.2012, 13:37  [ТС]     Межпрограммный обмен данными #7
немного изменил
Сервер
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
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include<conio.h>
#include<stdio.h>
#include<windows.h>
 
//---------------------------------------------------------------------------
// Программа иллюстрирует работу со специальным инструментом
// межпрограммного обмена данными - пайпами. Данная программа является
// сервером. Она создаёт пайп и ждёт присоединения к нему программы-клиента.
// После успешного соединения просит вводить текст и записывать их в пайп.
// Другая программа - клиент читает текст из пайпа и выдаёт их на консоль
#pragma argsused
 char s[80];
int num;
unsigned long WriteCount;
HANDLE PipeHandle;
int main(int argc, char* argv[])
{
 
 
//Создаём пайп с именем Data_Ch. ВНИМАНИЕ! Для корректной интерпретации строки
// с именем вместо одного слеша ставим два!
PipeHandle = CreateNamedPipe("\\\\.\\pipe\\Data_Ch",PIPE_ACCESS_OUTBOUND,PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, 3, 10000, 10000, 5000, NULL);
if (INVALID_HANDLE_VALUE!=PipeHandle)
{
printf("Wait to connect...\n");
}
else
{
printf("Error!\n");
}
 
if (ConnectNamedPipe(PipeHandle, NULL))  // Ждём пока к пайпу присоединится клиент
{
printf("Connecting success!\n");
}
 
 
 
 
while (s[0]!='q')
{
printf("Input tekst: \n");
gets(s);
num = atoi(s);  //Вводим с консоли число и записываем его в пайп
WriteFile(PipeHandle, &num, sizeof(num), &WriteCount, NULL);
}
 
 
getch();
 
FlushFileBuffers(PipeHandle);
DisconnectNamedPipe(PipeHandle);
CloseHandle(PipeHandle);
 
        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
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include<conio.h>
#include<stdio.h>
#include<windows.h>
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
int num;
unsigned long ReadCount;
 
HANDLE PipeHandle;
 
//Присоединяемся к пайпу
PipeHandle = CreateFile("\\\\.\\pipe\\Data_Ch", GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, 0);
if (PipeHandle)
{
printf("Connecting success!\n");
}
else
{
printf("Error!\n");
}
 
 
do
{ //Читаем данные из пайпа
ReadFile(PipeHandle, &num, sizeof(num), &ReadCount, NULL);
printf("Tekst = %d\n", num);
}
while (ReadCount!=0);
 
printf("Disconnected...\n");
getch();
        return 0;
}
//---------------------------------------------------------------------------
Не получается сделать чтобы текст выводился у клиента
ПРимер: У сервера ввожу cyberforum
У клиента выводится 0 (надо чтобы выводились cyberforum)
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
22.11.2012, 14:43     Межпрограммный обмен данными #8
while (s[0]!='q')
{
printf("Input tekst: \n");
gets(s);
num = atoi(s); //Вводим с консоли число и записываем его в пайп
WriteFile(PipeHandle, &num, sizeof(num), &WriteCount, NULL);
}
Какой еще нафиг cyberforum, если идет попытка преобразования строки в число? К слову, atoi вернет 0 при ошибке, видимо это и происходит.
Рустам-ВЛ
1 / 1 / 0
Регистрация: 06.10.2012
Сообщений: 45
22.11.2012, 14:49  [ТС]     Межпрограммный обмен данными #9
Ну я и прошу , чтобы вы глянули код, чтобы нормально текст выводило
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
22.11.2012, 15:14     Межпрограммный обмен данными #10
C++
1
2
3
4
5
6
7
8
while (s[0]!='q')
{
printf("Input tekst: \n");
gets(s);
num = strlen(s) + 1;  //Вводим с консоли число и записываем его в пайп
WriteFile(PipeHandle, &num, sizeof(num), &WriteCount, NULL);
WriteFile(PipeHandle, s, num, &WriteCount, NULL);
}
C++
1
2
3
4
5
6
7
8
9
do
{ //Читаем данные из пайпа
ReadFile(PipeHandle, &num, sizeof(num), &ReadCount, NULL);
char* s = malloc(sizeof(char) * num);
ReadFile(PipeHandle, s, num, &ReadCount, NULL);
printf("Tekst = %s\n", s);
free(s);
}
while (ReadCount!=0);
Как-то +- так.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2012, 15:16     Межпрограммный обмен данными
Еще ссылки по теме:

Обмен данными между процессами с помощью файлов, которые отображаются в память - C++
Классическая задача &quot;читатели-писатели&quot;, обмен информацией должен проходить с помощью файлов, отображаемых в память. Задание уже готово, но...

Создать два класса: PointXY с данными x, y (точка на плоскости в декартовых координатах) и PointPolar с данными r, phi (точка на плоскости в полярных - C++
Создать два класса: PointXY с данными x, y (точка на плоскости в декартовых координатах) и PointPolar с данными r, phi (точка на плоскости...

Модифицированний обмен - C++
Здравствуйте, можете подсказать, что это за сортировка (модифицированная) ? Гуглил, ничего не нашел, вот объяснение к этой сортировке. ...

Обмен значениями - C++
Не понимаю, почему в двух последних случаях обмен значений переменных не происходит. #include &lt;iostream&gt; void swapr(int &amp; a, int &amp;...


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

Или воспользуйтесь поиском по форуму:
Рустам-ВЛ
1 / 1 / 0
Регистрация: 06.10.2012
Сообщений: 45
22.11.2012, 15:16  [ТС]     Межпрограммный обмен данными #11
Спасибо всё работает
Yandex
Объявления
22.11.2012, 15:16     Межпрограммный обмен данными
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru