Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2011, 15:24   #1
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
Радость Не полностью принимаются данные через UDP порт

Всем привет! Я хотел написать программку для опроса сервера Half-life, но возникла проблема с приёмом ответа от сервера. Они принимается частично. Я использую компонент TNMUDP (пробовал просто на UDP сервере и через UDP клиент). Получается следующее:
Я отправляю команду (яяяяTSource Engine Query) игровому серверу и он в ответ на неё отправляет данные об игре, игроках и др. но они у меня принимаются частично, хотя на компьютер приходят полностью. Сканировал снифером.
Так отправляю команду (яяяяTSource Engine Query) игровому серверу.
=================================== =================================== ========
Packet ID: 384 TTL: 128
Packet size: 52 bytes type: UDP
Source IP : 10.4.145.120: 34665
Destination IP : 10.4.134.251: 34665
------------------------------ Packet dump -----------------------------------
000000 45 00 00 34 A8 D3 00 00 | 80 11 65 6A 0A 04 91 78 E..4......ej...x
000010 0A 04 86 FB 69 87 69 87 | 00 20 41 6A FF FF FF FF ....i.i.. Aj....
000020 54 53 6F 75 72 63 65 20 | 45 6E 67 69 6E 65 20 51 TSource Engine Q
000030 75 65 72 79 uery

Такие данные приходят от сервера на мой компьютер, но из этого всего в программе считывается только строчка (яяяяm10.5.134.130:27015) и всё. Остальное не считывается…
=================================== =================================== ========
Packet ID: 385 TTL: 126
Packet size: 128 bytes type: UDP
Source IP : 10.4.134.251: 34665
Destination IP : 10.4.145.120: 34665
------------------------------ Packet dump -----------------------------------
000000 45 00 00 80 71 F2 00 00 | 7E 11 9D FF 0A 04 86 FB E...q...~.......
000010 0A 04 91 78 69 87 69 87 | 00 6C 6D BF FF FF FF FF ...xi.i..lm.....
000020 6D 31 30 2E 35 2E 31 33 | 34 2E 31 33 30 3A 32 37 m10.5.134.130:27
000030 30 31 35 00 48 61 6C 66 | 2D 4C 69 66 2D 2D 20 45 015.Half-Lif-- E
000040 78 74 72 69 6D 61 6C 2D | 2D 73 65 72 76 65 72 00 xtrimal--server.
000050 54 68 65 5F 62 65 61 63 | 68 00 76 61 6C 76 65 00 The_beach.valve.
000060 48 61 6C 66 2D 4C 69 66 | 65 00 02 18 2F 64 77 00 Half-Life.../dw.
000070 01 00 00 00 01 00 00 00 | 00 00 00 00 00 00 00 02 ................

Принимаю данные так:
Код:
procedure TForm1.udpDataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
msg: TStringStream;
begin
msg:= TStringStream.Create('');
msg.Position:= 0;
UDP.ReadStream(msg);
Memo1.Lines.LoadFromStream(msg);
msg.Free;
end;
Подскажите, пожалуйста, в чём может быть проблема и как можно полностью считать данные? Уже всё облазил, но так и не разобрался. (готовая программка для таких целей работает полностью и хорошо)
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 26.01.2011, 15:33   #2
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

> в чём может быть проблема

В тебе, конечно)

Смотришь в книгу - видишь фигу)

000000 45 00 00 80 71 F2 00 00 | 7E 11 9D FF 0A 04 86 FB E...q...~.......
000010 0A 04 91 78 69 87 69 87 | 00 6C 6D BF FF FF FF FF ...xi.i..lm.....
000020 6D 31 30 2E 35 2E 31 33 | 34 2E 31 33 30 3A 32 37 m10.5.134.130:27
000030 30 31 35 00 48 61 6C 66 | 2D 4C 69 66 2D 2D 20 45 015.Half-Lif-- E

Терминирующий ноль в дампе видишь ?

ну вот тебе и ответ на вопрос)
mss вне форума Ответить с цитированием
Старый 26.01.2011, 15:42   #3
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Тем же снифером. Полностью рабочая програ отправляет запрос:
=================================== =================================== ========
Packet ID: 36 TTL: 128
Packet size: 53 bytes type: UDP
Source IP : 10.4.145.120: 28941
Destination IP : 10.4.134.251: 34665
------------------------------ Packet dump -----------------------------------
000000 45 00 00 35 E4 BA 00 00 | 80 11 29 82 0A 04 91 78 E..5......)....x
000010 0A 04 86 FB 0D 71 69 87 | 00 21 9D 7E FF FF FF FF .....qi..!.~....
000020 54 53 6F 75 72 63 65 20 | 45 6E 67 69 6E 65 20 51 TSource Engine Q
000030 75 65 72 79 00 uery.

Принимает ответ:
=================================== =================================== ========
Packet ID: 37 TTL: 126
Packet size: 128 bytes type: UDP
Source IP : 10.4.134.251: 34665
Destination IP : 10.4.145.120: 28941
------------------------------ Packet dump -----------------------------------
000000 45 00 00 80 B4 11 00 00 | 7E 11 5B E0 0A 04 86 FB E.......~.[.....
000010 0A 04 91 78 69 87 0D 71 | 00 6C 99 A7 FF FF FF FF ...xi..q.l......
000020 6D 31 30 2E 35 2E 31 33 | 34 2E 31 33 30 3A 32 37 m10.5.134.130:27
000030 30 31 35 00 48 61 6C 66 | 2D 4C 69 66 2D 2D 20 45 015.Half-Lif-- E
000040 78 74 72 69 6D 61 6C 2D | 2D 73 65 72 76 65 72 00 xtrimal--server.
000050 63 72 6F 73 73 66 69 72 | 65 00 76 61 6C 76 65 00 crossfire.valve.
000060 48 61 6C 66 2D 4C 69 66 | 65 00 03 18 2F 64 77 00 Half-Life.../dw.
000070 01 00 00 00 01 00 00 00 | 00 00 00 00 00 00 00 02 ................

И как вы на это ответите? Тут всё работает и полностью принимается.
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 26.01.2011, 16:10   #4
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

> Тут всё работает и полностью принимается

Так это же ПОЛНОСТЬЮ РАБОЧАЯ прога, а не твоя ущербная)
Та самая прога учитывает этот факт, а твоя не учитывает, потому и грабли)
mss вне форума Ответить с цитированием
Старый 26.01.2011, 16:23   #5
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
Сообщение от mss Посмотреть сообщение
> Тут всё работает и полностью принимается

Так это же ПОЛНОСТЬЮ РАБОЧАЯ прога, а не твоя ущербная)
Та самая прога учитывает этот факт, а твоя не учитывает, потому и грабли)
В том то и дело. Что я пытаюсь узнать как эту инфу принять целиком средствами Delphi, а не левыми программами?
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 26.01.2011, 16:38   #6
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

> как эту инфу принять целиком средствами Delphi

Такт ы ее целиком и принял строчкой UDP.ReadStream(msg) ))

А дальше с какого-то перепугу пытаешься работать с принятым стримом как с ЦЕЛОЙ строкой, без единого символа-терминатора, хотя их там хренова туча и первый же встреченный терминатор означает для Lines.LoadFromStream конец строки

)
mss вне форума Ответить с цитированием
Старый 26.01.2011, 16:56   #7
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
Сообщение от mss Посмотреть сообщение
> как эту инфу принять целиком средствами Delphi

Такт ы ее целиком и принял строчкой UDP.ReadStream(msg) ))

А дальше с какого-то перепугу пытаешься работать с принятым стримом как с ЦЕЛОЙ строкой, без единого символа-терминатора, хотя их там хренова туча и первый же встреченный терминатор означает для Lines.LoadFromStream конец строки

)
Всё! Теперь я понял. Немного переделал прогу. Теперь всё работает!!! Действительно всё принималось, но из-за этих символов-терминаторов остальное не выводилось. Большое Вам спасибо!!!
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обмен байтами через Udp Dima DDM Работа с сетью в Delphi 8 03.01.2011 04:19
Delphi. Можно ли отправить данные через порт открытый другой программой? losticsx Помощь студентам 2 24.08.2010 19:47
Получение команды на UDP порт и выполнение по ней действия monty "2" Работа с сетью в Delphi 1 29.04.2010 23:35
как можно читать бинарные данные, через UDP? b_gafurov Работа с сетью в Delphi 0 06.04.2009 15:15
UDP и данные Shouldercannon Работа с сетью в Delphi 4 30.07.2008 09:12