Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

Передача буфера 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.052 c
3-1081353520
Gennadiy
2004-04-07 19:58
2004.05.02
Как соеденить два IBQuery


6-1078984444
Alekzzzzz
2004-03-11 08:54
2004.05.02
Закачка файла на сайт.


1-1081762312
s
2004-04-12 13:31
2004.05.02
Работа с INI файлами


1-1082092275
Pirate
2004-04-16 09:11
2004.05.02
Сравнение по маске


14-1081362951
VID
2004-04-07 22:35
2004.05.02
В какой момент Windows даёт команду сбросить кеш винта на диски ?