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

Вниз

ClientSocket&ServerSocket   Найти похожие ветки 

 
maxim161 ©   (2006-01-30 08:06) [0]

Почему при посылке string с ClientSocket на ServerSocket (и наоборот) на несколько компьютеров, т.е., например с 1 ПК на 2, с 1 на 3...и т. д., между ПК, требуется интервал (задержка) времени? Может быть есть компонент, который может за долю секунды отправить string сразу на несколько компьютеров?


 
Digitman ©   (2006-01-30 08:34) [1]


> Почему при посылке .. между ПК, требуется интервал
> (задержка) времени?


Потому что по умолчанию включен алгоритм Нагла.


> есть компонент, который может за долю секунды отправить
> string сразу на несколько компьютеров?


Компоненты IdTCPClient/Server имеют св-во, управляющее включением/отключением nagle algorythm.


 
maxim161 ©   (2006-02-01 17:50) [2]

Возникает другой вопрос: Вот, например, у меня 10 компутеров и, что странно, на них стоит программа-сервер, а мой клиент должен подцепиться к каждому из них и успеть отправить стринг примерно за секунду. Вопрос следующий: Как? ishodnik, please...  ;|


 
Digitman ©   (2006-02-02 08:32) [3]


> странно, на них стоит программа-сервер


Что ж тут странного ?


> успеть отправить стринг примерно за секунду


Еще раз - отключи алгоритм Нагла, если он по умолчанию включен.

В WinsockAPI смотри ф-цию SetSockOpt() и опцию TCP_NODELAY.

Вот цитата из станд.справки :

The TCP_NODELAY option is specific to TCP/IP service providers. Enabling the TCP_NODELAY option disables the TCP Nagle Algorithm (and vice versa). The Nagle algorithm (described in RFC 896) is very effective in reducing the number of small packets sent by a host by essentially buffering send data if there is unacknowledged data already "in flight" or until a full-size packet can be sent. It is highly recommended that TCP/IP service providers enable the Nagle Algorithm by default, and for the vast majority of application protocols the Nagle Algorithm can deliver significant performance enhancements. However, for some applications this algorithm can impede performance, and TCP_NODELAY can be used to turn it off. These are applications where many small messages are sent, which need to be received by the peer with the time delays between the messages maintained. Application writers should not set TCP_NODELAY unless the impact of doing so is well-understood and desired, since setting TCP_NODELAY can have a significant negative impact of network and application performance.

Певый параметр ф-ции - хэндл гнезда, который в случае успешного коннекта ClientSocket"а с сервером можно получить прямо в обработчике события OnConnect чтением св-ва Socket.SocketHandle.

См. также TIdIOHandlerSocket.UseNagle для Indy-компонентов.


 
maxim161 ©   (2006-02-03 06:19) [4]

Ну а исходный код можно? ;)


 
Digitman ©   (2006-02-03 08:27) [5]


> Ну а исходный код можно?


Ну а почитать для начала справку к ф-ции ? Самостоятельно ?


 
maxim161 ©   (2006-02-12 09:10) [6]


> В WinsockAPI смотри ф-цию SetSockOpt() и опцию TCP_NODELAY.


А попоподробнее можно?


 
maxim161 ©   (2006-02-12 17:24) [7]

Вот отключить метод Нагла мне бы хотелось, а вот компонент менять... как-то ковырять ~16000 строк в исходнике не сильно бы хотелось.


 
atruhin ©   (2006-02-12 18:16) [8]

>> [1] Digitman ©   (30.01.06 08:34)
>> Потому что по умолчанию включен алгоритм Нагла.
Я почему то думал, что накопление пакетов действует только для последовательных мелких пакетов данных, для конкретного сокета.
Если он подключается сразу к нескольким, то какая тут задержка?
Даже если он делает подключения последовательно т.е. подключение, отправка, отключение, не должно быть задержки.
В чем я не прав? Поясни пожалуйста.


 
Digitman ©   (2006-02-13 08:24) [9]


> как-то ковырять ~16000 строк в исходнике не сильно бы хотелось


Не надо ничего "ковырять".
Вызывай SetSockOpt() в своем обработчике OnConnect.


> atruhin ©   (12.02.06 18:16) [8]


Да тут может и Nagle ни при чем.
Я просто сделал предположение.
Но без авторского кода ничего более определенного сказать невозможно.
Кто его знает, может под "задержкой" на самом деле подразумевается время установления коннекта + время дисконнекта.


 
maxim161 ©   (2006-02-13 16:03) [10]


> Кто его знает, может под "задержкой" на самом деле подразумевается
> время установления коннекта + время дисконнекта.

Верно, не могу же я менять Hostname при активном сокете.


 
Digitman ©   (2006-02-13 16:18) [11]


> Верно, не могу же я менять Hostname при активном сокете.


А ЭТО-то здесь причем ?!


 
maxim161 ©   (2006-02-14 13:34) [12]

При том, что клиент-сокет у меня подключается, например, к 10 компам. Я, устанавливаю компоненту хост, открываю сокет, отправляю стринг, сокет закрываю, ч\з определенное количество времени ("задержку" (тот самый интервал)) проделываю тоже самое для нового хоста.


 
Digitman ©   (2006-02-14 14:13) [13]


> сокет закрываю, ч\з определенное количество времени ("задержку"
> (тот самый интервал)) проделываю тоже самое для нового хоста


А задержку-то зачем делаешь ?!
Ты же сам сказал, что она тебе, мол, не нужна, и сам же ее при этом делаешь)..

Ты сокет закрыл ? Закрыл. Значит тут же смело можно менять параметры (то же св-во Host, к примеру) и тут же выполнять открытие


 
maxim161 ©   (2006-02-15 17:50) [14]


> А задержку-то зачем делаешь ?!
> Ты же сам сказал, что она тебе, мол, не нужна, и сам же
> ее при этом делаешь)..


Без задержки он у меня ничего не успевает отправлять


 
maxim161 ©   (2006-02-15 17:50) [15]


> А задержку-то зачем делаешь ?!
> Ты же сам сказал, что она тебе, мол, не нужна, и сам же
> ее при этом делаешь)..


Без задержки он у меня ничего не успевает отправлять


 
maxim161 ©   (2006-02-15 17:52) [16]


> А задержку-то зачем делаешь ?!
> Ты же сам сказал, что она тебе, мол, не нужна, и сам же
> ее при этом делаешь)..


Без задержки он у меня ничего не успевает отправлять


 
maxim161 ©   (2006-02-15 17:53) [17]

Ого... Что-т инет у меня заглючил... ;\


 
Digitman ©   (2006-02-16 08:27) [18]


> Без задержки он у меня ничего не успевает отправлять


Ах вон ты о чем оказывается) ..

В режиме ctNonBlocking успешное выполнение метода Open() еще не говорит об установлении коннекта с сервером - об этом скажет св-во Active = True :

CS.Open;
while not CS.Active do
 Application.ProcessMessages;
while CS.SendText("Строка") = -1 do;
CS.Close;

При этом следует убедиться что что у гнезда установлена опция SO_LINGER (см. SetSockOpt)


 
maxim161 ©   (2006-02-16 13:22) [19]


> При этом следует убедиться что что у гнезда установлена
> опция SO_LINGER (см. SetSockOpt)


Что-то я поразбирался с SetSockOpt, ничего не понял...


 
Digitman ©   (2006-02-16 13:41) [20]

На то и форум, чтобы задать вопрос типа, мол, вот ЭТО КОНКРЕТНО я не понял, мол, прокомментируйте если есть возможность..


 
maxim161 ©   (2006-02-16 13:50) [21]

Вот я и спрашиваю, как надо использовать SetSockOpt(). ;\


 
Digitman ©   (2006-02-16 13:58) [22]


> maxim161 ©   (16.02.06 13:50) [21]


Свинячишь ты.
Откровенным образом.

У тебя под рукой всегда :
- MSDN,
- Winsock2 Programmer"s Reference Help
- book.itep.ru
- Гугль (или иная поиск.система Рунета)  в конце-концов

Что, хочешь сказать что нигде из перечисленного ты не видел ни намека на сабж ?

Врешь.


 
atruhin ©   (2006-02-16 14:42) [23]

>> [18] Digitman ©   (16.02.06 08:27)
>>while not CS.Active do
>>   Application.ProcessMessages;
А вот такой код писать я бы посоветовал только если очень хорошо понимаешь что делаешь (на автора ветки не похоже). Предположим у него отправка по нажатию на кнопку. Сокет начинает соединение, интерфейс работает, пользователь жмет на кнопку повторно. Автор бежит сюда: "Ваш код не работает" :)


 
Digitman ©   (2006-02-16 14:48) [24]


> atruhin ©   (16.02.06 14:42) [23]


Автор - "батонокидатель".
На него и расчитано.


 
Digitman ©   (2006-02-16 14:48) [25]

Удалено модератором


 
atruhin ©   (2006-02-17 14:11) [26]

Я об этом и говорю! Если у него эта процедура будет вызываться по нажатию на кнопку, и если она нереентабельна то возможен трудноотслеживаемый глюк. Вторичный вызов процедуры до окончания внутреннего цикла.


 
ivane   (2006-02-18 00:36) [27]

maxim161, а не проще создать столько ClientSocket`ов сколько у тебя адресатов и затем просто дружно пустить их всех на коннект? А в onConnect написать код, который реализует отправку данных с последующим дисконнектом. Это по "скорострельности" будет лучше, т.к. каждое соединение вцелом получается независимым от остальных(данное утверждение истинно, если пропускной способности сети хватает для обеспечения необходимой скоростью всех соединений одновременно). Хотя тут нужно продумать блокировку клавиши, если идёт речь о случае, который описан atruhin`ом.


 
maxim161 ©   (2006-02-19 08:13) [28]

А откуда я знаю сколько хостов будет в моей программе?


 
ivane   (2006-02-20 09:39) [29]

ну... ты ж их откуда то берешь... не методом же тыка... :-)


 
maxim161 ©   (2006-02-21 09:29) [30]


> ну... ты ж их откуда то берешь... не методом же тыка...
> :-)

Беру из списка (файл)... :о


 
maxim161 ©   (2006-02-21 19:51) [31]

-=up=-



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

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

Наверх




Память: 0.52 MB
Время: 0.015 c
1-1139310580
Алексей Петухов
2006-02-07 14:09
2006.03.12
OLE Automation по примеру


3-1137613145
Dataqbazer
2006-01-18 22:39
2006.03.12
Как правльно? в чем может быть ошибка?


15-1140337476
unknown
2006-02-19 11:24
2006.03.12
Скоро на форумах будет опасно общаться...


2-1140537404
Михаил (Киров)
2006-02-21 18:56
2006.03.12
Нуль-модемное соединение


15-1139922163
Styx_
2006-02-14 16:02
2006.03.12
Вот кому Борланд продал Delphi :)





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