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

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

Восстановить пароль Регистрация
 
aae1
2 / 2 / 0
Регистрация: 05.01.2013
Сообщений: 68
19.10.2013, 22:52     Почему WriteFile не отправляет сообщение по каналу Pipe #1
Почему 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++ Com port (writefile кривая работа)
Почему сообщение о фатальном ошибке предпочтительно ? C++
Взаимодействие с помощью PIPE C++
C++ Приминение pipe(), _dup() и т.д.
[C] ReadFile/WriteFile C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2013, 23:10     Почему WriteFile не отправляет сообщение по каналу Pipe #2
Что-нибудь наподобие flush(), для очистки буфера, там нет?
aae1
2 / 2 / 0
Регистрация: 05.01.2013
Сообщений: 68
20.10.2013, 02:10  [ТС]     Почему WriteFile не отправляет сообщение по каналу Pipe #3
есть FlushFileBuffers(hHandle) , он типа для отчистки канала предназначен ,я попробовал но ничего не получилось все осталось тоже самое ,

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

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

Добавлено через 2 часа 53 минуты
помоему все дело вот в этом CString WriteTimeSales="Hello \n"; , хотя странно ,CString помоему должен указывать на окончание строки , ставишь \n и работает
alsav22
5282 / 4801 / 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
Сообщений: 68
20.10.2013, 12:14  [ТС]     Почему WriteFile не отправляет сообщение по каналу Pipe #5
да ,можно за место CString вообще например char buff[256] использовать

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

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