WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  определение конца пакета TCP

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   определение конца пакета TCP
alexsh опубликован 21-11-2001 14:23 MSK   Click Here to See the Profile for alexsh   Click Here to Email alexsh  
Пакет бъется на куски, которые я принимаю recv() занесколько раз. А как определить, что пакет пришол весь и больше ждать не надо?
Valery опубликован 22-11-2001 11:06 MSK     Click Here to See the Profile for Valery  Click Here to Email Valery     
TCP - протокол потоковый, а посему понятие пакет и соответственно конец пакета не существует.
Либо посылаешь сначала размер записи, потом ее тело, либо встраиваешь в поток символы-разделители, либо, если все данные переданы (не пакет а данные всего сеанса), то делаешь шатдаун передающей стороны, принимающая при этом получает признак конца файла.
alexsh опубликован 22-11-2001 12:44 MSK     Click Here to See the Profile for alexsh  Click Here to Email alexsh     
Функцию маршаллинга пакета писал другой программист, и на ней работает туча пакости в фирме. Так что изменить структуру пакета не могу. Но в одной из статей прочел, что последний фрагмент пакета ТСР имеет флаг FIN.
Но в винде я не нашел его определения. Или это реализация юникса?
Valery опубликован 22-11-2001 14:11 MSK     Click Here to See the Profile for Valery  Click Here to Email Valery     
Насколько я помню, этот флаг как раз определяет конец передачи в целом, то есть как раз EOF. Могу конечно ошибаться, книжка дельная дома, в том что у меня на работе есть копаться не охота.
Heromantor опубликован 22-11-2001 15:43 MSK     Click Here to See the Profile for Heromantor  Click Here to Email Heromantor     
1. FIN означает что прекращаеться передача от того кто послал этот пакет.
2. recv() для TCP соединения не обязательно принимает один пакет.
3. Как ты собираешься определять тип пакета?( Особенно если все это для Вынь)
4. FIN грубо говоря посылаеться при closesocket(). Делаеться так:

Client: FIN
Server: ACK FIN

Server: FIN
Client: ACK FIN

Только зачем такой гемор себе устраивать...

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.