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

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

Приписать к потоку данных его размер


Страницы:   1 2

KIR ©   (2004-09-21 14:42:00) 

Народ, можно ли решить след. задачу: в сети имеются клиент и сервер (взаимодействуют через сокеты), клиент передает серверу информацию (строку символов) ввиде потока данных, но для правильного чтения этого потока в его (потока) первых 4 байтах необходимо указывать его (потока) длинну... можно ли как-то это сделать?


ASMiD   (2004-09-21 15:07:00) [1]

примени следующее извращение
tr : record
case byte of
0:(b1:byte;i1:integer);
1:(st:string[4]);
end;

tr.b1:=4;
tr.i1:=Size;

StringStream.WriteString(tr.st);


KIR   (2004-09-21 14:59:00) [2]

>ASMiD   (21.09.04 14:57) [19]

Тогда, подскажи, как средствами PhP, которые на сокет может кидать только строки. Кинуть строку вместе с ее длинной.


ASMiD   (2004-09-21 14:57:00) [3]

А какая разница на чем писать?


KIR   (2004-09-21 14:55:00) [4]

Вообще-то вопрос в том, как в целом приписать к потоку его длинну. Т.к. возможно, что данные на сервер будут поступать с клиента не обязательно написанного на Дельфе или Билдере... А чтоб правильно считать требуется в первых 4 байтах иметь длинну... в том ивопрос как алгоритмически дополнить бинарный поток бинарными же данными...


Digitman   (2004-09-21 14:54:00) [5]

var
 Size: Integer;
..
StringStream.WriteBuffer(Size, SizeOf(Size));

StringStream.WriteString(..);
StringStream.WriteString(..);
StringStream.WriteString(..);
..
StringStream.WriteString(..);

Size := StringStream.Size - SizeOf(Size);
StringStream.Seek(0, soFromBeginning);
StringStream.WriteBuffer(Size, SizeOf(Size));
StringStream.Seek(0, soFromBeginning);


Суслик   (2004-09-21 14:53:00) [6]

что такое readstream?


KIR   (2004-09-21 14:52:00) [7]

сорри:

//на стороне клиента
 Stream := TStringStream.Create('');

 Client.OpenWriteBuffer;
 Client.WriteStream(Stream);
 Client.CloseWriteBuffer;

//на стороне сервера
 With AThread.Connection do
 begin
    Stream := TStringStream.Create('');
    ReadStream(Stream,-1,False);
    Stream.Seek(0,soFromBeginning);
    Memo1.Lines.LoadFromStream(Stream);
    Stream.Free;
 end;


ASMiD   (2004-09-21 14:52:00) [8]

В TStringStream есть метод Write Его надо вызвать в самом начале, когда поток пуст, а в качестве Buffer (см. Delphi Help) переменную, в которой храниться длина потока.


KIR   (2004-09-21 14:51:00) [9]


//на стороне клиента
  Stream := TStringStream.Create('');
  ReadStream(Stream,-1,False);

  Client.OpenWriteBuffer;
  Client.WriteStream(Stream);
  Client.CloseWriteBuffer;

//на стороне сервера
  With AThread.Connection do
  begin
     Stream := TStringStream.Create('');
     ReadStream(Stream,-1,False);
     Stream.Seek(0,soFromBeginning);
     Memo1.Lines.LoadFromStream(Stream);
     Stream.Free;
  end;


Суслик   (2004-09-21 14:51:00) [10]

Тогда у тебя два варианта:
1) либо выкатить код с попытками (неудачными) использовать поток
2) либо если кода нет словесно подробноописать, что нужно.

Тогда имхо шанс получить дельный совет велик.


ASMiD   (2004-09-21 14:49:00) [11]

Тогда - код на стол.


KIR   (2004-09-21 14:49:00) [12]

TStringStream


KIR   (2004-09-21 14:48:00) [13]

>ASMiD   (21.09.04 14:47) [7]
Я-то, конечно, понял...


Суслик   (2004-09-21 14:48:00) [14]

это ты для наводки написал бы хоть про какие потоки ты говоришь:)
тогда бы мы разобрались и дали тебе наводу разобраться


ASMiD   (2004-09-21 14:47:00) [15]

Ты хоть понял что спросил?


Суслик   (2004-09-21 14:47:00) [16]

в чем проблемы то?
в компьютере все в бинарном виде.


KIR   (2004-09-21 14:47:00) [17]

Народ, заранее прошу прщения за, возможно, нелепые вопросы, но с потоками первый раз сталкиваюсь, поэтому не могу понять как к потоку прибавить инфу да еще в бинарном представлении... вы уж простите, но можно пару строчек кода для наводки, а дальше я уж разгребусь, спасибо.


Суслик   (2004-09-21 14:45:00) [18]

класс :)


KIR   (2004-09-21 14:45:00) [19]

Поток же идет в бинарном виде...


Digitman   (2004-09-21 14:44:00) [20]


> можно ли как-то это сделать?


не только можно, но и нужно !

а в чем, собссно, сложности-то ?


Страницы:   1 2

Наверх

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