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

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

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

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

19.10.2013, 22:52. Просмотров 423. Ответов 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
Посмотрите здесь:
WriteFile C++
[C] ReadFile/WriteFile C++
C++ Com port (writefile кривая работа)
Взаимодействие с помощью PIPE C++
C++ Приминение pipe(), _dup() и т.д.
Почему сообщение о фатальном ошибке предпочтительно ? C++
Writefile() & String - В контроллер приходит не то, что было отправлено C++
Некорректная запись/чтение в pipe канал C++
Named Pipe клиент не подключается второй раз C++
Двунаправленный PIPE: как реализовать двунаправленную связь? C++
C++ Не отправляет файл на ftp
C++ Программа которая отправляет файл на почту

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

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

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

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

Добавлено через 2 часа 53 минуты
помоему все дело вот в этом CString WriteTimeSales="Hello \n"; , хотя странно ,CString помоему должен указывать на окончание строки , ставишь \n и работает
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.10.2013, 10:30     Почему WriteFile не отправляет сообщение по каналу Pipe #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  [ТС]     Почему WriteFile не отправляет сообщение по каналу Pipe #5
да ,можно за место CString вообще например char buff[256] использовать

Добавлено через 5 минут
главное что бы работало правильно
Yandex
Объявления
20.10.2013, 12:14     Почему WriteFile не отправляет сообщение по каналу Pipe
Ответ Создать тему
Опции темы

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