Главная страница
    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.056 c
6-1095258006
AlexV
2004-09-15 18:20
2004.11.28
Как проверить, доступен ли комп в локальной сети?


4-1097750561
UserUserov
2004-10-14 14:42
2004.11.28
Послать переменную в другую программу??


14-1100239466
WondeRu
2004-11-12 09:04
2004.11.28
Подскажите, чем можно мониторить запросы браузера...


14-1100197835
lamerok
2004-11-11 21:30
2004.11.28
Где взять полные арфографические словари?


14-1100096996
gn
2004-11-10 17:29
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский