Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос про особености протокола TCP


Страницы:   1 2

tcpz ©   (2006-01-08 17:44:00) 

Скажите пожайлуста, если я отправляю скажем

test1 test2 test3

возможна ситуация когда данные придут не так как планировалось, а конкретно test2 test1 test3

Если да, как этого избежать?

Спасибо!


Kacnep   (2006-03-22 08:52:00) [1]

Всем Спасибо!
Отдельное спасибо Сергею за попытку по настоящему понять проблему тупня. :(((
Проблема решена и совсем не втом месте. Дельфи и Инди рулят! Просто мозг нужно заряжать не орехами и главное вовремя :))).
В общем приходило нормально оба пакета! Прога ИХ НОРМАЛЬНО СУММИРОВАЛА. Но! Смотрим как

string:=1пакет;
если есть второй пакет то string:=string+второй пакет

И ВНИМАТЕЛЬНО ВИДЯ :))) что первый пакет оканчивается на #0#0!!!! (и это все в тип string :( ну е ма е %( ) что же получиться если к строке завершенной 0 добвить строку... :(

В общем ИНДИ Железно работаю!
Еще раз спасибо всем... Иногда трассировка помогает :)


Сергей М.   (2006-03-21 09:12:00) [2]


> Kacnep ©   (21.03.06 05:10) [30]


Поясни, что ты подразумеваешь под "пакетами" ..

На уровне UDP есть сообщения (ну или дейтаграммы), а пакеты - это на уровне IP .. Разбитие сообщения на пакеты и сборка его из пакетов - не твоя забота .. Твоя забота - прочитать принятое сообщение либо целиком либо последовательно, фрагмент за фрагментом ..


Polevi   (2006-03-21 09:07:00) [3]

>Kacnep ©   (21.03.06 05:10) [30]
делфи вообще ацтой
VirEx знает как, спроси у него


Kacnep   (2006-03-21 05:10:00) [4]

Главное во всех примерах на тех же СИях возможно собрать пакеты воедино а в дельфях получаеться нет? - не поверю!


VirEx   (2006-03-20 22:31:00) [5]

а кто воздержится?


Piter   (2006-03-20 22:28:00) [6]

не знаю


VirEx   (2006-03-20 22:23:00) [7]

да


Polevi   (2006-03-20 13:39:00) [8]

нет


Kacnep   (2006-03-20 13:07:00) [9]

2 ОЛЛ
Люди... облазил кучу сайтов с примерами -НО ОНИ ВСЕ либо на СИ либо на РНР :( А там типа все просто - можно получить размер посылки. А потом уже исходя из нее получать и дефрагментировать пакеты.
Тогда вопрос немного сдвину в другую плоскость
Если сервер передал мне ХYZ байт - что я пока не знаю.
Пришла какая то часть (первый пакет) - МОГУ ли я как нить узнать размер всей посылки из первого пакета? Если в теле не шифруется (не отправляется специально) размер всей посылки.
Что то типа TidUDPClient.РазмерВсейПосылки_ЧьейЧастьюЯвляетсяЭтотКусок?


VirEx   (2006-03-19 20:35:00) [10]

дайте как вспомню, стек протокола айй пи:
программный
транспортный
туннельный
аппаратный

UDP находится в транспортном, вроде... ик, ик :)


Сергей М.   (2006-03-15 09:56:00) [11]


> саму проблему фрагментирования УДП пакетов знаю и представляю


Фрагментирование относится не к UDP, а к низлежащему IP,

http://www.zeiss.net.ru/docs/technol/tcpip/tcp11.htm#t115000


OldNaum   (2006-03-14 19:48:00) [12]

каспер. иди на sourceforge.net и фильтруй по Counter-Strike. да прибудет с тобой сила, а со мной мои телепатические способности )


Каспер   (2006-03-14 19:19:00) [13]

2 Сергей
Клиент написаный на ПХП полностью рабочий!
Он реально работает!
Я думал смогу расковыряв то что мне нужно в его коде написать маааленькую приблуду :( не получилось - не смог разобраться.
Поэтому вылез на форум, расширил проблему (фрагментация Н пакетов - и их сбор) поискал - нашел наиболее подходящий топик. И продолжил его. Я не сказал бы что ничего не понимаю в сетевом программировании. И Уважаемого Подгорецкого перевод прочел. До этого писали свою аську -как раз на ней учились. Т.е. саму проблему фрагментирования УДП пакетов знаю и представляю - но с инди не получается = чего то недопонимаю. Вот и прошу помощи. Требуеться разобрать пришедшие один или два пакета - пример разбора приведен но на ПХП а нужно в Инди :(
Мастера! Помогите! Плиз.


Сергей М.   (2006-03-14 14:06:00) [14]

С чего ты вообще взял, что некая инф-ция отправлена сим сервером в виде несколькихпакетов ?


Kacnep   (2006-03-14 14:02:00) [15]

2 Сергей
В таком случае если не рыть глубже это мертвое начинание... :(
Тогда возьмем тупо предположим что весь разбор пришедших пакетов лежит тут
//get results from server
  $buffer = fread ($this->socket, 1);
  $status = socket_get_status($this->socket);
  $buffer .= fread($this->socket, $status["unread_bytes"]);

  //If there is another package waiting
  if(substr($buffer, 0, 4) == "\xfe\xff\xff\xff")
  {
    //get results from server
    $buffer2 = fread ($this->socket, 1);
    $status = socket_get_status($this->socket);
    $buffer2 .= fread($this->socket, $status["unread_bytes"]);

    //If the second one came first
    if(strlen($buffer) > strlen($buffer2))
      $buffer = substr($buffer, 14) . substr($buffer2, 9);
    else
      $buffer = substr($buffer2, 14) . substr($buffer, 9);

  }

  //In case there is only one package
  else
    $buffer = substr($buffer, 5);

  //return unformatted result
  return $buffer;


и что мы знаем что пришли 1..2 пакета у которых в заголовке 4 байта если первый пакет то #255#255#255#255 если второй то #254#255#255#255.
Это то что я понял...
А дальше они как то волшебным образом их компонуют в один если их два :(
Как на дельфи проверить после прихода одного пакета -есть ли еще что нить? В общем самое классное если кто то знаком с ПХП хотяб на минимальном уровне :( Тогда легко переведется


Сергей М.   (2006-03-14 13:33:00) [16]


> Kacnep ©   (14.03.06 13:27) [17]


Многое (если не все) зависит от реализации ПХПшного fread() в случае когда он работает с UDP-гнездом .. Ибо как таковое чтение из UDP-гнезда сводится в вызову ф-ции Winsock.recvfrom(), особенности логики работы которой ты в состоянии прочитать/осмыслить самостоятельно.


Kacnep   (2006-03-14 13:27:00) [17]

2 Плохиш
я вытавил код протокола в другом языке писаный.
Требуется решить проблему с фрагментированными УДП пакетами в Дельфи с использованием инди 10, по аналогии с поцедурой которая описана выше этого длинного поста на ПХП.


Плохиш   (2006-03-14 11:29:00) [18]

А что здесь правила уже изменились? или мы на форуме по пхп находимся?


Kacnep   (2006-03-14 06:28:00) [19]

2 Эрейзер
Уверен!
Вот от чего я отталкивался! Не хотел захламлять но видимо придеться  -потом надеюсь модер не обидиться и потрет.
Вот от чего я начал писать этот проект.
НО ПОВТОРЮСЬ! Нужно правильно перевести на Дельфи в Инди кусочек кода приведеный выше. Там как раз идет разбор УДПшных пакетов. Это единственная инфа по протоколу используемому утилитой rcon которой я владею. УВЕРЕН ее достаточно!


Eraser   (2006-03-13 22:11:00) [20]


> Каспер   (13.03.06 20:37) [12]

уверен что эта процедура отправляет данные по UDP?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо