![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Есть два флеш-приложения. В обоих методом socket.send() отсылается абсолютно одинаковый XML. В одном случае он без проблем приходит на сокет-сервер и обрабатывается, в другом - приходит разорваным на две части и естественно вызывает ошибку как невалидный XML. (сокет-сервер один и тот же с одинаковыми параметрами: порт, адрес и т.п.)
var xml_string='<?xml version="1.0" encoding="UTF-8" ?><ask user_id="35"><item class_obj="scene_objects" id="" method="GetLinkedScenes"><item param="scene_id">85</item><item param="fields">xmap, ymap, linked_scene_id</item><item param="scene_fields">name</item></item></ask>'; socket.send(xml_string); // вот что возвращает сокет-сервер в случае ошибки: <?xml version="1.0" encoding="UTF-8" ?> <error> <item param="input XML data error">Name contains invalid start character: '&#x69;' </item> </error> |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Скорее всего, в одном из приложений используется useCodepage.
|
|
|||||
|
нет, useCodepage не использую, всё в Unicode-формате.
Главная странность в том, что передача разрывается в одном и том же месте: <?xml version="1.0" encoding="UTF-8" ?><ask user_id="35"><i - здесь передача обрывается и сервер начинает разбор сообщения; затем приходит следующая часть в новом сообщении: tem class_obj="scene_objects" id="" method="GetLinkedScenes"><item param="scene_id">85</item><item param="fields">xmap, ymap, linked_scene_id</item><item param="scene_fields">name</item></item></ask> |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Могу лишь посоветовать посмотреть в hex-виде разницу.
|
|
|||||
|
То, что пакеты в TCP/IP протоколах рвутся на части - это нормально и это зависит от многих параметров, в т.ч. операционка, качество связи и т.п. . Как правило, в сокетах есть всевозможные параметры, которые могут на это влиять - типа размер буфера передачи и т.п. Правильный сокет не должен по приходу одного пакета сразу его обрабатывать - он должен накапливать приходящие данные в своем буфере и смотреть наличие в этом буфере маркера конца данных (в случае Флэшового XML сокета это нулевой байт). Как только маркер найден - обрабатываем из буфера данные до этого маркера, удаляем из буфера эти данные и продолжаем его дописывать приходящими пакетами до появления следующего маркера.
Так что смотри свой сокет-сервер... На чем он написан? Сам писал или уже что-то готовое взял? Может там есть какие настройки... Или, что мало вероятно, после символа "<i" откуда-то затискивается нулевой байт, вводящий в заблуждение сокет-сервер.
__________________
Two beer or not two beer?... |
|
|||||
|
to SPV: спасибо, я собсно так и предполагал, но убедить в этом нашего perl-програмера было очень трудно, он обвинял флеш во всём
![]() Выставил он нормальный тайм-аут на ожидание нулевого байта, теперь не обрываются сообщения, ура. |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:03. |
|
|
« Предыдущая тема | Следующая тема » |
|
|