Форум: "Сети";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];
ВнизПриписать к потоку данных его размер Найти похожие ветки
← →
KIR (2004-09-21 14:42) [0]Народ, можно ли решить след. задачу: в сети имеются клиент и сервер (взаимодействуют через сокеты), клиент передает серверу информацию (строку символов) ввиде потока данных, но для правильного чтения этого потока в его (потока) первых 4 байтах необходимо указывать его (потока) длинну... можно ли как-то это сделать?
← →
Digitman © (2004-09-21 14:44) [1]
> можно ли как-то это сделать?
не только можно, но и нужно !
а в чем, собссно, сложности-то ?
← →
Суслик © (2004-09-21 14:44) [2]А что проблемы есть?
Пиши 4 байта строки и все...
В чем проблема?
← →
KIR (2004-09-21 14:45) [3]Поток же идет в бинарном виде...
← →
Суслик © (2004-09-21 14:45) [4]класс :)
← →
KIR (2004-09-21 14:47) [5]Народ, заранее прошу прщения за, возможно, нелепые вопросы, но с потоками первый раз сталкиваюсь, поэтому не могу понять как к потоку прибавить инфу да еще в бинарном представлении... вы уж простите, но можно пару строчек кода для наводки, а дальше я уж разгребусь, спасибо.
← →
Суслик © (2004-09-21 14:47) [6]в чем проблемы то?
в компьютере все в бинарном виде.
← →
ASMiD (2004-09-21 14:47) [7]Ты хоть понял что спросил?
← →
Суслик © (2004-09-21 14:48) [8]это ты для наводки написал бы хоть про какие потоки ты говоришь:)
тогда бы мы разобрались и дали тебе наводу разобраться
← →
KIR (2004-09-21 14:48) [9]>ASMiD (21.09.04 14:47) [7]
Я-то, конечно, понял...
← →
KIR (2004-09-21 14:49) [10]TStringStream
← →
ASMiD (2004-09-21 14:49) [11]Тогда - код на стол.
← →
Суслик © (2004-09-21 14:51) [12]Тогда у тебя два варианта:
1) либо выкатить код с попытками (неудачными) использовать поток
2) либо если кода нет словесно подробно описать, что нужно.
Тогда имхо шанс получить дельный совет велик.
← →
KIR (2004-09-21 14:51) [13]
//на стороне клиента
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;
← →
ASMiD (2004-09-21 14:52) [14]В TStringStream есть метод Write Его надо вызвать в самом начале, когда поток пуст, а в качестве Buffer (см. Delphi Help) переменную, в которой храниться длина потока.
← →
KIR (2004-09-21 14:52) [15]сорри:
//на стороне клиента
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;
← →
Суслик © (2004-09-21 14:53) [16]что такое readstream?
← →
Digitman © (2004-09-21 14:54) [17]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);
← →
KIR (2004-09-21 14:55) [18]Вообще-то вопрос в том, как в целом приписать к потоку его длинну. Т.к. возможно, что данные на сервер будут поступать с клиента не обязательно написанного на Дельфе или Билдере... А чтоб правильно считать требуется в первых 4 байтах иметь длинну... в том ивопрос как алгоритмически дополнить бинарный поток бинарными же данными...
← →
ASMiD (2004-09-21 14:57) [19]А какая разница на чем писать?
← →
KIR (2004-09-21 14:59) [20]>ASMiD (21.09.04 14:57) [19]
Тогда, подскажи, как средствами PhP, которые на сокет может кидать только строки. Кинуть строку вместе с ее длинной.
← →
ASMiD (2004-09-21 15:07) [21]примени следующее извращение
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);
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.036 c