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

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

Войти
Регистрация
Восстановить пароль
 
aae1
2 / 2 / 0
Регистрация: 05.01.2013
Сообщений: 69
#1

Почему WriteFile не отправляет сообщение по каналу Pipe - C++

19.10.2013, 22:52. Просмотров 424. Ответов 4
Метки нет (Все метки)

Почему WriteFile не отправляет сообщение по каналу Pipe

ситуация следующая , есть два приложения на с++ я написал сервер который должен транслировать данные для клиента , в функцию отправки написал следующее

C++
1
2
3
4
5
6
7
8
9
unsigned long _stdcall WriteTimeSales(void *p)
{
 
        CString WriteTimeSales="Hello";
        DWORD cbWritten;
        WriteFile(hPipeNameLineWriteTS,WriteTimeSales,WriteTimeSales.GetLength(),&cbWritten,NULL);
     
        return 0;
}
Канал создан так
C++
1
2
3
4
5
6
7
8
9
10
11
 // 2 Создаем канал связи для передачи данных
        hPipeNameLineWriteTS = CreateNamedPipe(PipeNameLineWriteTS,PIPE_ACCESS_DUPLEX |PIPE_TYPE_BYTE |FILE_FLAG_OVERLAPPED,
                PIPE_TYPE_BYTE ,PIPE_UNLIMITED_INSTANCES, 0,512,0,NULL);
 
        //Ожидаем соединение клиента по этому каналу
        fConnectPipeWriteTS = ConnectNamedPipe(hPipeNameLineWriteTS,NULL);
        // Если соеденились то сообщим об этом
        if(fConnectPipeWriteTS)
        {
                fprintf(stdout,"\nConnected LineWriteTimeSales....\n");
        }

Дак вот , соединение происходит , когда пытаюсь отправит сообщение с сервера на клиента , то оно не отправляется , как только закрываю сервер , на клиенте все сообщения появляються , пробовал каждый раз после отправки сообщения закрывать канал , тогда все отправляется , но сообщение очень и очень много , Так что закрывать и открывать постоянно канал наверное будет очень накладно , подскажите как лучше сделать
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2013, 22:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему WriteFile не отправляет сообщение по каналу Pipe (C++):

WriteFile -> pipe -> ReadFile Несколько сообщений смешиваются в одно - C++ WinAPI
Доброго времени суток! Решил создать консоль для вывода сообщений о работе основной программы. Консоль запускается при помощи...

Pipe - работа в сети: клиент не может подключиться к созданному каналу из-за отсутствия доступа - C++/CLI
Изучаю С++CLI. Создал консольные приложения Клиент - Сервер. В пределах одной рабочей станции все работает - сервер создает канал PIPE,...

Исключение, почему не отправляет сообщение о ошибке? - Java
Все работает, только отправляет не само сообщение об ошибке, а название класса. Порядок действий. 1) Создаю класс для сообщения об...

Клиент отправляет сообщение сервеу, а сервер это отправляет всем клиентам... - C Linux
Есть сервер и несколько клиентов. Клиент отправляет сообщение сервеу, а сервер это отправляет всем клиентам. Прошу помочь разобраться.

Найдите вероятность того, что сообщение передано по 2-му каналу - Теория вероятностей
Доброго времени суток, подскажите, пожалуйста, верно ли я решила задачи по терверу? Если нет, то объясните, пожалуйста, где ошибки. ...

Подскажите, почему не отправляет email? - Delphi
Подскажите пжлст, почему не отправляет email idSMTP1.Host:='smtp.yandex.ru'; idSMTP1.Port:=25; idSMTP1.Username:='d-ozimov'; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2013, 23:10 #2
Что-нибудь наподобие flush(), для очистки буфера, там нет?
aae1
2 / 2 / 0
Регистрация: 05.01.2013
Сообщений: 69
20.10.2013, 02:10  [ТС] #3
есть FlushFileBuffers(hHandle) , он типа для отчистки канала предназначен ,я попробовал но ничего не получилось все осталось тоже самое ,

помогает вот это DisconnectNamedPipe , а потом снова Connected , но как я уже говорил это слишком накладно по производительности будет

Добавлено через 1 минуту
Может тут что то в канале синхронность или асинхронность настраивать надо ? , я просто с пайпами никогда не сталкивался поэтому даже незнаю как настроить правильно канал

Добавлено через 2 часа 53 минуты
помоему все дело вот в этом CString WriteTimeSales="Hello \n"; , хотя странно ,CString помоему должен указывать на окончание строки , ставишь \n и работает
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.10.2013, 10:30 #4
Цитата Сообщение от aae1 Посмотреть сообщение
помоему все дело вот в этом CString WriteTimeSales="Hello \n"; , хотя странно ,CString помоему должен указывать на окончание строки , ставишь \n и работает
Не знаю как у вас, но у меня компилятор такой параметр, в этой функции не принимает. Пишет, что нет подходящей функци преобразования ATL::CString в LPCVOID. Может лучше на WriteTimeSales.GetBuffer() заменить? Хотя у вас, может в проекте, какие-то настройки добавлены(или хедеры другие) и поэтому компилируется.
aae1
2 / 2 / 0
Регистрация: 05.01.2013
Сообщений: 69
20.10.2013, 12:14  [ТС] #5
да ,можно за место CString вообще например char buff[256] использовать

Добавлено через 5 минут
главное что бы работало правильно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2013, 12:14
Привет! Вот еще темы с ответами:

Почему форма отправки не отправляет данные? - PHP
<?php $name = $_POST; //ИМЯ $name = htmlspecialchars($name); $name = urldecode($name); $name = trim($name); $famel = $_POST;...

Mail отправляет текст, как файл. Почему? - PHP
Добрый ночер! Собственно вопрос в заголовке, вот код: <?php mail("telnac11@gmai.com","Заказ на сайте...

Не отправляет сообщение - PHP
написал скрипт, для отправки сообщения на почту <?php if(isset($_POST)) { $name = $_POST; if($name == '') unset($name); ...

Не отправляет сообщение клиентам - C++
Пишу сетевой чат на С++ Есть клиент-сервер (сокет-сервер), при получении сообщения он отправляет данное сообщение клиенту, который его...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.10.2013, 12:14
Ответ Создать тему
Опции темы

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