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

Вниз

Передача буфера 8к по сетке   Найти похожие ветки 

 
S@shka ©   (2004-03-09 14:16) [0]

Для Digitman> (и остальных)
Передаю с помощью блокируемого TClientSocket
соответственно создал S : TWinSocketStream
и передавал с помощью S.WriteBuffer (Buffer,8192);
и принимал на другой стороне
все вроде бы ничего но загорается лампочка Collision на моем 10-точном хабе - странно :(
Я наткнулся на S.WaitForData () - в хелпе написано использовать для определения готовнисти сокета принимать и писать данные.
Переписал
S.Write (Buffer,4096);
S.WaitForData (100);
....
все нормально - дампочка не горит :)
Но вопрос WaitForData - ладно там для определения пришли данные или нет - но каков принцип работы для процесса отпраавки - и почему тогда эта одна функция.
Спасибо.


 
Digitman ©   (2004-03-09 14:34) [1]


> каков принцип работы для процесса отпраавки


никакого отношения ни к "процессу отправки" ни к "лампочке" внутренний алгоритм этого метода не имеет

у тебя где-то ошибка в программе


 
Verg ©   (2004-03-09 14:38) [2]

WaitForData нужен для ожидания готовности сокета к передаче данных. И все. Больше ни для чего.

Т.е. в твоем случае нужно писать

if S.WaitForData(тайм-аут) then
begin
 S.Write(Buffer, 4096);
end;


 
S@shka ©   (2004-03-09 15:24) [3]

Или в самой сетке. Потому как включив два этих компа
в другой хаб (пустой) коллизий не наблдюдается.

To Verg >>>
только ли для готовности передачи??? а прием?

Вопрос есть ли разница сделать SendBuffer 8192 или кусками по 2048 ? например?


 
Verg ©   (2004-03-09 15:41) [4]


> To Verg >>>
> только ли для готовности передачи??? а прием?
>


Что прием? Read-ом читаешь да и все.


> Вопрос есть ли разница сделать SendBuffer 8192 или кусками
> по 2048 ? например?


Почти никакой. Твои данные TCP (send) просто переписвает в свои буфера и все. Если места в буферах нет, то send будет висеть (заблокирует) до появления этого места или до разрыва соединения. По сути WaitForData и ждет всего лишь появления этого места в передающих буферах TCP.
Как бы WaitForData перед отправкой уменьшает вероятность того, что send заблокируется. Но с другой стороны, если ты при этом send-ишь слишком длинный блок данных, то send может заблокироваться все равно.
Т.о. меньший размер буфера немного предпочтительней.
Я бы назвал это нюансом, а не принципиальной разницей.
Особенно в остутствии в виндовых сокетах такой опции, как SO_SNDLOWAT.


 
Verg ©   (2004-03-09 16:35) [5]

А ведь я не прав!
Че-то тут в хелпах дельфовых не то написано.

Сейчас глянул исходник - WaitForData на самом деле проверяет на наличие принятых данных, а вовсе не

Waits up to Timeout milliseconds for the socket connection to be ready to transfer data.

Так что, пардон, ready to transfer - там такой вообще нет ф-ции.
И значит с размерами передаваемых буферов вообще никакой разницы нет.



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

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

Наверх




Память: 0.46 MB
Время: 0.041 c
3-1080915002
Gaval
2004-04-02 18:10
2004.05.02
SQL Запрос


1-1082095259
Dentist
2004-04-16 10:00
2004.05.02
ICO to BMP


1-1081820986
niko4543
2004-04-13 05:49
2004.05.02
Word


1-1082290014
TIER87
2004-04-18 16:06
2004.05.02
Организация процесса поиска


1-1081945120
siriusP
2004-04-14 16:18
2004.05.02
Почему сбрасываются свойства в компоненте?





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