Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
6-1095347434
Lord de Mon
2004-09-16 19:10
2004.11.28
Proxy в NMHTTP


14-1100170661
vecna
2004-11-11 13:57
2004.11.28
Предлагаю решить задачку с собеседования...


3-1099414350
Arximed
2004-11-02 19:52
2004.11.28
Перенос данных


6-1095318349
maxistent
2004-09-16 11:05
2004.11.28
"ТИХАЯ" проверка коннекта


6-1095462159
Comp
2004-09-18 03:02
2004.11.28
Трафик





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский