![]() |
Сервер на С++, клиент на Flash. Файл политики
Привет всем! Сижу уже целый день на одном месте, пишу в QT свой код. Есть такая проблема, флеш коннектится по 843 порту, ему уходит строчка с файлом политики сокетов, но он (флеш) не воспринимает его. Перечитал здесь темы 3-4, но так и не осилил. Почитал статью на хабре, не помогло. В общем сейчас вы - моя последняя надежда.
Код на С++: Код:
if (txt==QString("<policy-file-request/>")){Код:
socket = new QTcpSocket();Код AS3:
|
Вижу точно одну ошибку и одну потенциальную ошибку.
Точно ошибка в том, что вы нулевой байт не посылаете в конце сообщения. char * не может содержать нулевого байта по определению. Это байт-терминатор. Так что все, что работает с этим char * (без явного указания длины) не воспринимает ваш \0 как часть строки. Поставьте \0 в начале и наслаждайтесь debug(). Как правильно сделать - не скажу, не пишу на С++ и документацию лень искать. Наверное, где-то в ней должно быть написано, как отдельные байты посылать. Потенциальная ошибка. char != byte. А вот flash-player, вероятно, ждет все в UTF-8 (не проверял, может быть, заголовок xml корректно понимает). В какой кодировке socket->write пишет? А вдруг там utf-16? Или этот write ожидает byte */void * (и пишет байты) а при этом у вас char 16-битный или даже 32-битный? По-хорошему, нужно либо сразу работать с байтами, либо кодировать/декодировать текстовую строку в правильный байтовый буфер. |
Если используете Qt 5 - откатывайтесь скорей на Qt 4.8.4.
В пятерке пока многова-то ошибок. И для перевода всего в UTF-8: Код:
QTextCodec *utfcodec=QTextCodec::codecForName("UTF-8");Удачи! |
Да, верно, программирую в QT, только 4.8.
Сейчас попробовал сделать вот так: Код:
if (txt==QString("<policy-file-request/>")){Код:
843portЧто еще можно попытаться сделать? |
Так... С кодировками стало гораздо лучше. Только вот вы зачем-то к буферу прибавляете пустую строку. Это нехорошо. Это ничего не даст. Прибавляйте к ней char, тогда он добавится. Или, лучше, append'ите char в этот буфер, а не прибавляйте. Должно помочь.
|
Код:
if (txt==QString("<policy-file-request/>")){ |
Неправильно. Вы опять добавляете строку (char *, пустую), а я прошу добавить символ (char). Ладно, подскажу. Символ записывается '\0'.
|
Не забудьте отключить IPv6 на сервере.
|
Цитата:
Код:
if (txt==QString("<policy-file-request/>")){ |
Вот странно, кстати, у меня вот так работает:
Код:
char* securityAnswer = |
| Часовой пояс GMT +4, время: 04:20. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.