powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Какой извращенец писал MessageBoxW?
25 сообщений из 196, страница 3 из 8
Какой извращенец писал MessageBoxW?
    #39476160
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибку смотри
Код: plaintext
1.
2.
3.
4.
5.
...
if MultiByteToWideChar(...) == 0
   wsprintf(tbuf, L" error %d", GetLastError());
endif
...
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39476210
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbНе прокатило

Вариант с получением IP на WinCe 6.0 не работает, хотя сам адрес определяется корректно

автор gethostname(PCName, 30);

h = gethostbyname(&PCName[0]);

LocalIP = inet_ntoa (*(reinterpret_cast<in_addr *>(*(h->h_addr_list))));


MultiByteToWideChar(1251,0,LocalIP,-1,tbuf,30);

::MessageBoxW(NULL,(LPCWSTR)&tbuf, L"Connected", MB_ICONEXCLAMATION | MB_OK);

Может действительно, проблема с кодировками?

Как определить, в какой кодировке пришло сообщение в буфер?Во-первых, в структуре hostent функция gethostbyname() возвращает совсем не int, который ты пытаешься сконвертировать в строку через inet_ntoa().
Во вторых:
"Note The gethostbyname function has been deprecated by the introduction of the https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms738520(v=vs.85).aspx] getaddrinfo function. Developers creating Windows Sockets 2 applications are urged to use the getaddrinfo function instead of gethostbyname ."

З.Ы. Лично у меня всё прекрасно работает.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39476221
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devSergey_rbНе прокатило

Вариант с получением IP на WinCe 6.0 не работает, хотя сам адрес определяется корректно

пропущено...


Может действительно, проблема с кодировками?

Как определить, в какой кодировке пришло сообщение в буфер?Во-первых, в структуре hostent функция gethostbyname() возвращает совсем не int, который ты пытаешься сконвертировать в строку через inet_ntoa().
Во вторых:
"Note The gethostbyname function has been deprecated by the introduction of the https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms738520(v=vs.85).aspx] getaddrinfo function. Developers creating Windows Sockets 2 applications are urged to use the getaddrinfo function instead of gethostbyname ."

З.Ы. Лично у меня всё прекрасно работает.

Забыл написать объявление

Код: plaintext
1.
char * LocalIP;
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39476230
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbЗабыл написать объявление
Код: plaintext
1.
char * LocalIP;

Тогда нафига inet_ntoa() ?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39478797
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Embedded C++ не поддерживает потоки.
Я в шоке.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39478814
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbEmbedded C++ не поддерживает потоки.
Я в шоке.До С++11 в языке вообще не было поддержки потоков, что не мешало писать многопоточные программы :)
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39478826
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbEmbedded C++ не поддерживает потоки.
Я в шоке.Ни один компилятор не поддерживает потоки. Есть лишь библиотеки с классами-обёртками, которые используют API вызовы функций операционной системы для работы с потоками. Потоки работают исключительно на уровне операционной системы.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39478837
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобрался, есть CreateThread
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39478887
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbРазобрался, есть CreateThreadтогда лучше _beginthreadex(...)
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39478907
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbтогда лучше _beginthreadex(...)
уверен, что у топикстартера Windows?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39478909
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилCEMbтогда лучше _beginthreadex(...)
уверен, что у топикстартера Windows?
в смысле полноценная винда, а не CE
на CE - CreateThread вроде как
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39478929
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbРазобрался, есть CreateThreadЭто, как раз, функция WinAPI.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39479096
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devSergey_rbРазобрался, есть CreateThreadЭто, как раз, функция WinAPI.

Работает на WinCE 5-7
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39479867
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заметил странную работу сокетов - если сервер посылает 2 строку, то считывается строка, если несколько строк, то сначала сервер присылает 4 байта, а потом только донные.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39479868
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbЗаметил странную работу сокетов - если сервер посылает 2 строку , то считывается строка, если несколько строк, то сначала сервер присылает 4 байта, а потом только донные.

если сервер посылает 1 строку
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39479871
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TCP сокет не обещает выдавать данные получателю теми же порциями, которыми отправлено.
Прийти может сколько угодно, а твоя задача принимать и складывать в буфер пока не получишь столько байт, сколько нужно.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39479878
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. надо делать 2 раза recv - первый, чтобы считать 4 байта и второй - чтобы получить данные
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39479880
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TTCP сокет не обещает выдавать данные получателю теми же порциями, которыми отправлено.
Прийти может сколько угодно, а твоя задача принимать и складывать в буфер пока не получишь столько байт, сколько нужно.

Я проверял несколько раз - если одна строка, то она приходит целиком, если несколько, то сначала 4 байта, видимо это размер данных.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39479881
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbт.е. надо делать 2 раза recv - первый, чтобы считать 4 байта и второй - чтобы получить данные
Если первые 4 байта это размер данных, то сначала читаешь размер, выделяешь буфер этого размера и потом recv() до тех пор пока буфер не заполнишь.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39479883
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSergey_rbт.е. надо делать 2 раза recv - первый, чтобы считать 4 байта и второй - чтобы получить данные
Если первые 4 байта это размер данных, то сначала читаешь размер, выделяешь буфер этого размера и потом recv() до тех пор пока буфер не заполнишь.

Я делал буфер размером 10240, но порции он выдавал все равно по 1024
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39479885
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSergey_rbт.е. надо делать 2 раза recv - первый, чтобы считать 4 байта и второй - чтобы получить данные
Если первые 4 байта это размер данных, то сначала читаешь размер, выделяешь буфер этого размера и потом recv() до тех пор пока буфер не заполнишь.

4 байте приходят не всегда, а только когда передается несколько строк
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39479933
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbDima Tпропущено...

Если первые 4 байта это размер данных, то сначала читаешь размер, выделяешь буфер этого размера и потом recv() до тех пор пока буфер не заполнишь.

4 байте приходят не всегда, а только когда передается несколько строк
Если у тебя обмен по TCP то ты прежде чем что-то писать должен узнать протокол обмена и писать в соответствии с ним. Бери документацию на свой сервер и читай. Эвристический анализ в таких вопросах пустая трата времени.

TCP это поток, который приходит кусками данных, размеры кусков зависят передающей среды, тут нет блоков/сообщений, есть куски, которые могут содержать как целое сообщение так и 2, 5 и 17.3 сообщения. Собирать сообщения из кусков твоя задача, как разработчика, а чтобы собирать надо знать как, т.е. протокол обмена. Единственное что гарантирует TCP - это то что данные придут в порядке отправления.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39480041
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Не поможет, пациент не догоняет
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39480118
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSergey_rbпропущено...


4 байте приходят не всегда, а только когда передается несколько строк
Если у тебя обмен по TCP то ты прежде чем что-то писать должен узнать протокол обмена и писать в соответствии с ним. Бери документацию на свой сервер и читай. Эвристический анализ в таких вопросах пустая трата времени.

TCP это поток, который приходит кусками данных, размеры кусков зависят передающей среды, тут нет блоков/сообщений, есть куски, которые могут содержать как целое сообщение так и 2, 5 и 17.3 сообщения. Собирать сообщения из кусков твоя задача, как разработчика, а чтобы собирать надо знать как, т.е. протокол обмена. Единственное что гарантирует TCP - это то что данные придут в порядке отправления.

С протоколом все понятно - сервер написан на Делфи и передает StringList.
Клиент, работавший на Дельфи, все прекрасно передает и принимает.

К сожалению, на С++ нет аналогичного класса...
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39480126
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbС протоколом все понятно - сервер написан на Делфи и передает StringList.
Клиент, работавший на Дельфи, все прекрасно передает и принимает.

К сожалению, на С++ нет аналогичного класса...
Читай описаловку на этот StringList, возможно там описаны форматы обмена. Или в форуме по дельфям спроси.
Потом пиши свой класс на С++.
Может в форуме по дельфям готовый аналог для С++ подскажут.
...
Рейтинг: 0 / 0
25 сообщений из 196, страница 3 из 8
Форумы / C++ [игнор отключен] [закрыт для гостей] / Какой извращенец писал MessageBoxW?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]