Главная страница
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.046 c
14-1081846347
NeyroSpace
2004-04-13 12:52
2004.05.02
Искал я армейские присказки


1-1082025096
Ivolg
2004-04-15 14:31
2004.05.02
Папка


11-1065885048
Revolter
2003-10-11 19:10
2004.05.02
выделение текста в комбобокс


14-1081331239
olookin
2004-04-07 13:47
2004.05.02
Оценка стоимости программного обеспечения


3-1081260725
Alexey
2004-04-06 18:12
2004.05.02
Identity в базе SQLServer