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

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

вопрос про сокеты (ламерский) [D7, Win2k]


masaka ©   (2006-10-20 20:04:00) 

отправляю данные с "сервера"
ServerSocket.SendText('razmer'+IntToStr(st.Size) + #0);
ServerSocket.SendStream(st);

сначала размер данных потом сами данные.. но на клиентсокете все приходит наоборот! сначала вся информачия а потом только сообщение с размером.. почему?


Ketmar   (2006-10-21 00:07:00) [1]

data.size <> -1?


masaka   (2006-10-20 23:59:00) [2]

так (на клиент_рид):

S:= Socket.ReceiveText;
if (copy(s, 1, 6)='razmer') and (Data.Size=-1) then
 begin
  tmpS:=copy(s, 7, Pos(#0, s)-7);
  Data.Size:=StrToInt(tmpS);
  Delete(s, 1, Pos(#0, s));
  Data.Buf.Write(s[1], length(s));
  LogWrite('Size '+tmpS);
end
else
begin
 Data.Buf.Write(s[1],length(s));
 LogWrite('+');
 if Data.Buf.Size=Data.Size then
  begin
   Reciving:=false;
   Data.Buf.Position :=0;
   GBase.LoadFromStream(Data.Buf);
   StatusWrite('Complete');
  end;
end;

в результате приема буфер наполняется данными и только в конце тсановится известен размер.. для диагностики вставил запись в лог - выглядит примерно так

+
+
+
+
+
Size 404321


Dmitrij_K   (2006-10-20 20:58:00) [3]

неможетбыть
как принимаешь?


Наверх

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