Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];

Вниз

Буфер неопределенной заранее длины через Сокет   Найти похожие ветки 

 
Кодер ©   (2004-10-22 14:38) [0]

Привет, я передаю буфер через WinSocketStream следующим образом:

 
var
...
Buffer: array [0..100] of Char;
i: byte;

begin
 ClientSocket1.Open;
 try
   Stream:= TWinSocketStream.Create(ClientSocket1.Socket, 10000);
   try
     FillChar(Buffer, SizeOf(Buffer), 0);
     for i:=1 to length(edQuery.Text) do
       Buffer[i-1]:= edQuery.Text[i];
     Stream.Write(Buffer, SizeOf(Buffer));
...


и принимаю на сервере:


var
...
 Buffer: array [0..100] of Char;

begin
 try
   while not Terminated and ClientSocket.Connected do
     begin
       try
         Stream:= TWinSocketStream.Create(ClientSocket, 10000);
         try
           FillChar(Buffer, SizeOf(Buffer), 0);
           if Stream.WaitForData(10000)
             then
               begin
                 Stream.Read(Buffer, SizeOf(Buffer));
...

во всем этом мне не нравится то, что в программе уже заложена максимальная длина передаваемого и принимаего буфера, как можно передавать и принимать буфер каждый раз разного размера, в зависимости от размера передаваемего/принимаего запроса через WinSocketStream в данном случае. Я слышал, что можно как-то поиграться с Buffer: PChar, передавая буфер длины какой мне нужно, а на другой стороне прежде чем, считывать буфер из потока, сначало определяется длина этого буфера.


 
Reindeer Moss Eater ©   (2004-10-22 14:41) [1]

Есть и другой путь:
Мыслепередача между принимающим и передающим процессорами через мировой эфир.


 
Reindeer Moss Eater ©   (2004-10-22 14:42) [2]

А если без шуток, то естественно, надо сообщать длину принимающей стороне.
Либо принимать соглашение о признаке конца.


 
Кодер ©   (2004-10-22 17:40) [3]

Но ест же свойство Size у WinSocketStream, описание которого гласит о том, что это свойство содержит значение количества байт в потоке, которые "пришли" от клиента.


 
Verg ©   (2004-10-22 22:11) [4]

При передаче я тоже не понял, для чего ты так тщательно переписываешь одну область памяти в другую. Чем она лучше "оригинала"?
 stsize := length(edQuery.Text);
 i := 0;
 while (stsize - i) > 0 do
 begin
   res := Stream.Write(pchar(edQuery.Text)[i], stsize - i);
   if res > 0 then
     inc(i, res)
   else
     //Произошла ошибка (res < 0) или разрыв соединения (res = 0);
 end;
 

А при приеме.... О каком "заранее известном" размере буфера ты говоришь? TCP - это ж протокол поточной (stream), а не блочной передачи. Какая разница, по большому счету, буферами какого размера ты будешь "вычерпывать" поток принимаемых данных? Ты главное правильно это делай, а то я смотрю тебе совершенно "фиалетово" что вернула Stream.Read, а это есть ключевой момент, между прочим.
А размер твоего "ковшика" TCP интересует меньше всего...



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.036 c
1-1103729393
Unknown user
2004-12-22 18:29
2005.01.09
Чтение из потока в разных форматах.


1-1103650760
denik
2004-12-21 20:39
2005.01.09
Окаймление для Edit.


1-1103623777
opel
2004-12-21 13:09
2005.01.09
как вставить символ в таблицу


14-1103314879
Чеширский_Кот
2004-12-17 23:21
2005.01.09
"Не будите спящего полицейского" с Аленом Делоном


3-1102542933
Vemer
2004-12-09 00:55
2005.01.09
Работа с External Tables..





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский