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

Вниз

Уважаемые мастера, подскажите, пожалуйста...   Найти похожие ветки 

 
Nord-Ost   (2002-12-10 09:18) [0]

Если я принимаю данные с помощью команды ReceiveBuf(buf,count), то как выбрать размер буфера, чтобы полностью принять весь пакет информации, переданный сервером? А если не хватит буфера, то не пропадет ли информация и смогу ли я принять оставшуюся часть в следующем пакете? Спасибо.


 
Polevi   (2002-12-10 09:22) [1]

информация не пропадет
ReceiveBuf возвращает колво байт, помещенных в твой буфер
если ты ожидаешь больше данных - вызови эту ф-ию снова


 
savva   (2002-12-10 09:24) [2]

а он может весь срузу и не прийти:) чтобы узнать скока тебе надо получать есть функция ReceiveLen, которая и возвращает длину буффера на входе.. но это не означает что все что передал сервер сразу придет к тебе.. имеет смысл перед посылкой данных отсылать их длину - чтоб клиент "взял" из потока данных стока скока пологается.. как это сделать - поиши по форуму по словам TotalDataSize и DataBlock - Digitman кому то уже все дословно разжевывал (даже кусок рабочего кода дал).


 
Nord-Ost   (2002-12-10 09:25) [3]

А как сервер узнает, откуда начинать продолжение передачи?


 
Anatoly Podgoretsky   (2002-12-10 09:28) [4]

Зачем тебе об этом беспокоиться, это забота сервера, твое дело принимать


 
Nord-Ost   (2002-12-10 09:30) [5]


> savva

А сервер не мой, посему я не могу приказать ему передавать длину :-(


 
Nord-Ost   (2002-12-10 09:32) [6]


> Anatoly Podgoretsky

Вы имете в виду, что при следующем вызове ReceivebBuf я приму следующую порцию, продолжение предыдущей передачи?


 
Nord-Ost   (2002-12-10 09:47) [7]

Кажись, понял:
ReceiveBuf(buf,Socket.ReceiveLength)
Это правильно?


 
savva   (2002-12-10 10:05) [8]

в принципе правильно.. но лучще (для меня) сделать так
len:=Socket.ReceiveLength;
recLen:=ReceiveBuf(buf,len);

а дальше сравнивать len и recLen..


 
savva   (2002-12-10 10:07) [9]

> Nord-Ost © (10.12.02 09:30)
> А сервер не мой, посему я не могу приказать ему передавать
> длину :-(
а признак границы данных какой либо есть?


 
Nord-Ost   (2002-12-10 10:13) [10]


> savva

Нет, нету (смотрел сниффером)


 
savva   (2002-12-10 10:35) [11]

а как же ты собрался считать? ну прочитал ты данные в буфер - что дальше? они что имеют фиксированную длину? если да - то как определить начало?


 
Nord-Ost   (2002-12-10 10:44) [12]

Нет, фиксированной длины они не имеют. А длина определяется из TCP-пакета, она ведь присутствует в заголовке.


 
Nord-Ost   (2002-12-10 10:46) [13]

Хе-хе, сам же и ответил :-)


 
Digitman   (2002-12-10 11:04) [14]


> А сервер не мой, посему я не могу приказать ему передавать
> длину


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

Но если, например, известно, что сервер В ДАН. МОМЕНТ передает строку, ограниченную терминатором и не имеющую префикса размера, что мешает получить ее ? Буферизуй прием (читая в каждом событии OnRead() данные с пом. ReceiveBuf() во врем.буфер размером не более 4к), анализируй наличие в буфере символа-терминатора строки и добавляй символы слева от терминатора (если он обнаружен, либо - все содержимое врем.буфера) в основной буфер, накапливая таким образом данные, последовательно принятые в нескольких событиях OnRead()


 
Nord-Ost   (2002-12-10 11:08) [15]


> Digitman

Угу, понял, спасибо огромное.



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

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

Наверх





Память: 0.47 MB
Время: 0.064 c
1-5017
ser_ker
2003-01-23 14:39
2003.02.03
Как получить код завершения DOS-программы ?


14-5151
cat-76
2003-01-15 21:50
2003.02.03
Чат для локалки


14-5194
Wonder
2003-01-14 15:09
2003.02.03
Грамотный ли вы человек?


6-5104
John
2002-12-05 22:44
2003.02.03
<b>Socket ы</b>


3-4788
xn0bys
2003-01-09 09:45
2003.02.03
Уважаемые, помогите...





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