Форум: "Сети";
Текущий архив: 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