Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 15.01.2010, 16:58   #1
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

finomen, счтываешь из сокета всё что там есть в буфер, далее извлекаешь по одному из буфера все целые пакеты и удаляешь их из буфера, опять считываешь всё из сокета и добавляешь в буфер, опять извлекаешь все целые пакеты, ну и так далее)
так я делаю в своих последних программах, в пакетхаке у меня было сделано по другому, написал обёртку к recv которая вызывала recv, далее если recv прочем данных меньше чем запрашивалось то снова вызывала её в цикле пока не было прочитано всех данных...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 16.01.2010, 15:11   #2
Новичок
 
Регистрация: 07.01.2010
Сообщений: 13
Сказал Спасибо: 3
Имеет 0 спасибок в 0 сообщенях
Smith пока неопределено
По умолчанию

Цитата:
Сообщение от xkor Посмотреть сообщение
finomen, счтываешь из сокета всё что там есть в буфер, далее извлекаешь по одному из буфера все целые пакеты и удаляешь их из буфера, опять считываешь всё из сокета и добавляешь в буфер, опять извлекаешь все целые пакеты, ну и так далее)
А как тогда с пакетами у которых начало только пришло, а конец в следующем буфере? Ведь при добавлении следующего буфера начало затрется и пакет потеряется, если это начало сохранять то получается как у автора схема. Или я чего то не так понял?

ЗЫ xkor можно исходник этой обработки...
Smith вне форума   Ответить с цитированием
Старый 16.01.2010, 16:37   #3
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

delphi Код:
procedure TConnection.WriteBuf(var buf; const size: Integer); var   i: Integer; begin   if size<=0 then Exit;   i:=Length(fBuf);   SetLength(fBuf,i+size);   Move(buf,fBuf[i+1],size);   ParseBuf; end; procedure TConnection.ParseBuf; var   pck: PFixPck; begin   pck:=@fBuf[1];   while(Length(fBuf)>=2)and(Length(fBuf)>=pck.size)do begin    try     if pck.size<2 then pck.size:=2;     if isLogin then fBF.bfDecode(pck.id,pck.size-2)                else fCrypt.DecryptGP(pck.id,pck.size-2)                ;     ParsePck(pck); // обработка пакета    finally     Delete(fBuf,1,pck.size);     pck:=@fBuf[1]; // может и не надо но не помешает...    end;   end; end;
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
За это сообщение xkor нажился 2 спасибками от:
Ответ

  CoderX :: Forums > Основные форумы > Программинг


Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 04:56.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!