Показать сообщение отдельно
Старый 10.07.2010, 17:55   #15
Местный
 
Аватар для J-Fobos
 
Регистрация: 09.06.2008
Сообщений: 867
Сказал Спасибо: 175
Имеет 468 спасибок в 259 сообщенях
J-Fobos пока неопределено
По умолчанию

Кхм, результат должен был быть чуть другим. Должны были быть отправлены первые 3 пакета, а потом "Поймали пакет #$11". Скрипт то правильно написан, почти. Я специально добавил логи чтобы вы это увидели.

Собственно проблема в строчке
Код:
buf:=hstr('1F' + 'IntToStr(ListID)' + '01 00 00 00 B1 19 00 00 01 00 00 00');
Смотрите что происходит при выполнении этой строки (если ListID=1234567891):
1) выполняется команда IntToStr и в результате мы получаем 1234567891 -> '1234567891'
2) Дальше суммируются строки:
'1F' + '1234567891' + '01 00 00 00 B1 19 00 00 01 00 00 00' ->
'1F 12 34 56 78 91 01 00 00 00 B1 19 00 00 01 00 00 00'
3) Выполняется функция hstr и получаем пакет
'1F 12 34 56 78 91 01 00 00 00 B1 19 00 00 01 00 00 00' ->
#$1F#$12#$34#$56#$78#$91#$01#$00#$00#$00#$B1#$19#$00#$00#$01#$00#$00#$00

Синим цветом я выделил то место куда мы запихнули ListID, но сразу бросается в глаза: оно занимает 5 байтов, а должно занимать 4 байта. А если ListID будет равно 1324, то получится что оно займет 2 байта в пакете и опять же пакет будет неправильным.

В чем проблема? В том что команда ReadD вытаскивает с пакета число в 10-тиричной системе вычислений, и команда IntToStr "пихает" в пакет чистой в той же 10-тиричной системе, а надо то в 16-ти.
Для этого случая есть команда WriteD и в вашем случаи надо ее использовать.


PS:
Hебольшая догадка почему чар крутится: возможно ListID нечетное количество символов получается, например 12345. Тогда в конец отсылаемого пакета попадает не 00, а просто 0 и это приводит к нарушению чтения всех последующих данных.
__________________

В любом из нас спит гений. И с каждым днем все крепче.

Переходим на протокол нового поколения jabber
J-Fobos вне форума   Ответить с цитированием
За это сообщение J-Fobos нажился спасибкой от: