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

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

Восстановить пароль Регистрация
 
Рустам-ВЛ
1 / 1 / 0
Регистрация: 06.10.2012
Сообщений: 45
22.11.2012, 12:11     межпрограммный обмен данными #1
Помогите сделать , чтобы при вводе в одной консоле(сервере) выдавала на другую консоль(клиент) текст
В данный момент этот код выдаёт только числа
Сервер
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;
}
//---------------------------------------------------------------------------
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для 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.hostingkartinok.com/upload...89bf79f7af.jpg
taras atavin
Ушёл с форума.
 Аватар для 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
Ушёл с форума.
 Аватар для 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
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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++ Обмен данными с ЭБУ через RS-232
Обмен данными между 2 клиентами через интернет C++
C++ Обмен данными между процессами

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

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

Текущее время: 11:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru