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

Вниз

Проблемы при работе с Indy   Найти похожие ветки 

 
Ketmar ©   (2006-10-15 21:26) [120]

>[119] Cyrax(c) 15-Oct-2006, 20:09
>Если не поможет, буду отслеживать движение IP-пакетов и
>проводить всякие извращенские опыты...
ага. вместо чтобы написать простейший автомат... или по ходу обсуждения задача уже поменялась? лень перечитывать.


 
Cyrax ©   (2006-10-15 23:10) [121]

Задача никак не менялась.
Могу написать простейший автомат и реализовать его в своём модуле. Будет некоторая надстройка (реализованная только в моём модуле и не выходящая за его пределы) над прикладным протоколом (неизвестным в общем случае). Ещё подумаю...
Но это всё будет после того, как разберусь с текущим глюком с отключением буферизации... - это садомазо такое (похоже на ситуацию с языковой панелью, которую я всё-таки вытащил наружу)...


 
Ketmar ©   (2006-10-15 23:19) [122]

жениться бы вам, барин... (ц)


 
Сергей М. ©   (2006-10-16 08:33) [123]


> Cyrax ©   (15.10.06 19:15) [117]


> Self.Socket.Binding.SetSockOpt(Id_SOL_SOCKET, Id_TCP_NODELAY,
>  Char(@Id_SO_False), SizeOf(Id_SO_False));


Кто такой Self в данном контексте ?

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


 
Cyrax ©   (2006-10-16 22:07) [124]

Ketmar ©   (15.10.06 23:19) [122]
жениться бы вам, барин... (ц)

Тогда останется один путь - повеситься...
Сейчас есть приоритеты и поважнее...

Сергей М. ©   (16.10.06 08:33) [123]
Кто такой Self в данном контексте ?

Ето наследник TIdTCPClient. Self я уже давно убрал. Он мне нужен был только чтоб добраться до SetSockOpt...

Нагель отключается на уровне  Id_IPPROTO_TCP.

И на уровне Id_IPPROTO_TCP отключал, и на уровне... в общем, все уровни перепробовал... Везде одна и та же ошибка...

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

Где в справке указано, что... Вообще, где в справке хоть что-то описано об этих уровнях. Например, всё, что написано про Id_IPPROTO_TCP:
Id_IPPROTO_TCP = IPPROTO_TCP;

Unit
IdStackConsts
Description
Id_IPPROTO_TCP

И так про все константы, используемые в SetSockOpt...

_________________________________________________________________
Кто-нибудь отключал буферизацию TCP-пакетов с помощью SetSockOpt ?


 
Ketmar ©   (2006-10-16 22:14) [125]

>[124] Cyrax(c) 16-Oct-2006, 22:07
>Кто-нибудь отключал буферизацию TCP-пакетов с помощью
>SetSockOpt ?
ну, я отключал. только как -- убей, не помню. и вспоминать лениво. давно было. где-то на "королевстве" была статья по работе с сокетами, там в том числе и об этом сказано.


 
Cyrax ©   (2006-10-16 23:15) [126]

Ketmar ©   (16.10.06 22:14) [125]
ну, я отключал.

Ну вот, самому ведь приходилось, а говоришь код пиши правильно, буфера не трогай... $\g

где-то на "королевстве" была статья...

паоищу.. Глядел какой-то форум по этой функции, но на C++ - на паскале не прокатывает...


 
Ketmar ©   (2006-10-16 23:35) [127]

>[126] Cyrax(c) 16-Oct-2006, 23:15
>Ну вот, самому ведь приходилось, а говоришь код пиши
>правильно, буфера не трогай...
я это делал "из спортивного интереса". в реальных задачах не приходилось ни разу.


 
Сергей М. ©   (2006-10-17 08:33) [128]


> Где в справке указано, что... Вообще, где в справке хоть
> что-то описано об этих уровнях


Не ту справку ты куришь.

Справка к индейским компонентам в основном ориентированы на батонокидателей, которые не заморачиваются низкоуровневым программированием гнезд.

Следует курить как минимум справку MS Windows Sockets 2 Reference (поставляется штатно), где сказано:

level = IPPROTO_TCP*

TCP_NODELAY BOOL Disables the Nagle algorithm for send coalescing.
* - included for backward compatibility with Windows Sockets 1.1  


BSD options not supported for setsockopt are:

...
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 ....

А еще лучше искать инф-цию в первоисточнике - MSDN.


> Везде одна и та же ошибка


В смысле "Access violation at address XXXXXXXX ...." ?

И чему равен XXXXXXXX ? Входит ли XXXXXXXX в диапазон адресов, распределенных под образ твоего модуля в ВАП процесса ?
Если входит, то в [117] - вранье, либо ты не умеешь пользоваться встроенным отладчиком.
Если не входит, то обязательно входит в диапазон адресов для образа какого-либо иного модуля, и эта инф-ция (т.е. какого конкретно модуля) не менее важна при поиске причин отказа.


 
Verg ©   (2006-10-17 09:49) [129]


> Отсоединяюсь я методом Disconnect (пробовал и DisconnectSocket).
>  При каждом очередном соединении клиента ОС выделяет ему
> новый порт. Если же задать порт клиента самому, то при повторном
> соединении возникает ошибка - порт то остался занятым...
>  
> С TIdTCPServer такой проблемы не возникает.
>
> Что самое интересное, пример работы с TIdTCPServer и TIdTCPClient
> (IdTCPDemo), скачанный с инета, показывает те же результаты.
>  
> На форумах читал, как обсуждали глюки некоторых компонентов
> Indy.
> Так вот, может это очередной глюк? Или отсоединяться (клиенту)
> нужно как то по-другому?


Это не от Indy.
см. http://book.itep.ru/4/44/tcp_443.htm
Состояние соединения TIME_WAIT.


 
Cyrax ©   (2006-10-18 11:20) [130]

Тут такая задача подвернулась. Надо извратиться и отправить широковещательный TCP-пакет для поиска сервера...
А вообще, нужно максимально быстро найти сервер (с неизвестным IP-адресом и неизвестным портом из известных диапазонов), пользуясь только протоколом TCP/IP...


 
Сергей М. ©   (2006-10-18 11:25) [131]


> нужно максимально быстро найти сервер



> пользуясь только протоколом TCP/IP...


Это что, блажь ? Чем это обосновано ? Чем UDP помешал ?


 
Cyrax ©   (2006-10-18 11:31) [132]

Так извращеннее всего...
Ну, модуль у меня TCP-шный, кроме того, сервер может не поддерживать UDP...


 
Сергей М. ©   (2006-10-18 11:52) [133]


> сервер может не поддерживать UDP


Что мешает реализовать в нем такую поддержку ?


 
Cyrax ©   (2006-10-18 12:11) [134]

Допустим, сервер работает на основе сторонних модулей (а не моего), не реализующих поддержку UDP...


 
Сергей М. ©   (2006-10-18 12:33) [135]

Да по барабану, на основе чего он там сейчас работает)
Если ты причастен к его разработке, то ты всегда волен реализовать сервер так как тебе нужно.


 
Cyrax ©   (2006-10-18 12:45) [136]

Если ты причастен к его разработке, то ты всегда волен реализовать сервер так как тебе нужно.

Ну, предположим, так...
И какой из всего этого можно сделать вывод ?

з.ы. Видно, вы никогда не отправляли групповые TCP-пакеты...


 
Сергей М. ©   (2006-10-18 12:52) [137]


> предположим, так...
> И какой из всего этого можно сделать вывод ?


реализуй в серверном приложении UDP-сервер на фикс.порту - он будет принимать UDP-бродкаст-запросы (простейшие в реализации !) клиентов и отвечать, на каком порту в дан.момент "слушает" соотв. TCP-сервер.


> вы никогда не отправляли групповые TCP-пакеты


Я много чего еще не делал)
А тебе посоветую не заниматься демагогией, а иззучить для начала хотя бы это

http://www.google.ru/search?q=Winsock+multicast&start=0&ie=utf-8&oe=utf-8&client=firefox-a&rls=org.mozilla:ru:official


 
Cyrax ©   (2006-10-19 21:24) [138]

Сергей М. ©   (18.10.06 12:52) [137]
реализуй в серверном приложении UDP-сервер на фикс.порту - он будет принимать UDP-бродкаст-запросы (простейшие в реализации !) клиентов и отвечать, на каком порту в дан.момент "слушает" соотв. TCP-сервер.

На фиксированном нельзя - может быть занят.
Если же брать диапазон - то придётся отправлять б-касты на все порты этого диапазона. Т.е., фактически клиент ищет UDP-сервер, отправляя б-касты на все порты диапазона, чтобы узнать IP-ник TCP-сервера...

Ну, и такой вопрос. Как можно поглядеть программно, какие порты заняты, чтобы вместо указания 0 в качестве порта программно найти свободный порт и туда посадить сервер ?
Это нужно, чтобы клиенту при поиске UDP-сервера пришлось шарить только этот диапазон...

А тебе посоветую не заниматься демагогией, а иззучить для начала хотя бы это
http://www.google.ru/search?q=Winsock+multicast&start=0&ie=utf-8&oe=utf-8&client=firefox-a&rls=org.mozilla:ru:official

Это всё, я так понимаю, для глубоких ламёров...
А что надо изучать ламёрам, пытающимся вырваться в юзёры ?.. :)

з.ы. Всё-таки TCP-мультикасту раскидать было бы проще...
Просто никто этого не хочет...
...или не может...


 
Сергей М. ©   (2006-10-20 08:36) [139]

http://citforum.utmn.ru/programming/delphi/sockets-2/#08


 
Lamer@fools.ua ©   (2006-10-20 08:56) [140]

>1. Как в винде посмотреть, какие порты в данный момент заняты и какими прогами (средствами винды, без программирования)

netstat — показывает активные соединения
Process Explorer (3rd party утилита) — показывает... много чего показывает :o)


 
Cyrax ©   (2006-10-23 23:38) [141]

У меня такая проблема.
Отсылаю широковещательный UDP-пакет серверу. Тот его принимает и отсылает клиенту ответ (TCP-порт). На клиенте я принимаю данные:
UDPBaseClient.RecieveData(buf,buflen). Но при выполнении этой команды выбрасывается исключение Socket error, не дожидаясь, пока пройдёт timeout мс, указанные в параметрах функции.
Пробовал принимать и через ReceiveString - то же самое...
Убрал отсылку ответа на сервере - то же самое...
Вообще убрал на клиенте отправку запроса серверу. Оставил только приём - всё нормально. Функция приёма ждёт timeout мс и успешно завершается безо всяких socket error...
Выходит, на клиенте при отправке запроса серверу (а эта операция происходит без ошибок) происходит что-то такое, что заставляет выбрасывать исключение на процедуре приёма данных на клиенте...
UDP-сервер у меня всегда активен при выполнении всех этих операций.

Теперь по поводу поиска сервера через UDP. 3 довода против такого подхода:
1. UDP-сервер никак нельзя сажать на заранее определённый порт - он может быть занят. Даже небольшой диапазон портов (10-20) в общем случае тоже может быть занят...
2. Если взять заранее определённый диапазон портов для UDP-сервера (скажем, 500 или 1000 номеров), то клиенту придётся их перебирать широковещательными UDP-пакетами. Здесь уже встаёт вопрос, стоит ли задействовать UDP, когда можно перебрать этот же диапазон портов (или чуть уже) TCP-пакетами, просто в N (число компов в локальной сети) раз дольше, чем в случае с UDP. Но если компов в локальной сети N немного, то поиск TCP-пакетами может оказаться ненамного дольше, чем поиск UDP-пакетами.
3. И вообще из этого может получиться следующее:
...покажу на примере живого анекдота про вирусную атаку:

Сижу на работе, отсылаю UDP-broadcast"ы по диапазону адресов. У одного начинает ругаться антивирус, потом у другого... Через некоторое время подходит начальство, говорит: "Ты Scada3 ?" - "Да". "От тебя вирусы лезут"...

Так вот, нужно, чтобы такого "вирусного" эффекта не было, когда клиент будет искать сервер...
Намекаю на другие способы организации поиска сервера. Способов организации взаимодействия компов в сети, к счастью, не мало. Например, mailslot"ы или другие технологии. К сожалению, опыта пока не достаточно, поэтому требуется совет компетентных в этой области...


 
Сергей М. ©   (2006-10-24 11:09) [142]


> выбрасывается исключение Socket error


Проанализируй код этой ошибки, прежде чем делать какие-то дальнейшие поспешные умозаключения.


> 1. UDP-сервер никак нельзя сажать на заранее определённый
> порт - он может быть занят. Даже небольшой диапазон портов
> (10-20) в общем случае тоже может быть занят


Это оговорено в ТЗ ?


> Но если компов в локальной сети N немного, то поиск TCP-
> пакетами может оказаться ненамного дольше, чем поиск UDP-
> пакетами


Выбирать тот или иной протокол и принимать решение придется в любом случае тебе, если это не оговорено в ТЗ.


> нужно, чтобы такого "вирусного" эффекта не было, когда клиент
> будет искать сервер


На то есть сетевой администратор - он обязан привести сет.настройки раб.станций в соответствие с особенностями и требованиями твоего софта.


> Способов организации взаимодействия компов в сети, к счастью,
>  не мало


Одна из них - NamedPipes, в условиях ЛВС имеющая ряд ощутимых преимуществ перед технологиями/механизмами, ориентированными на Internet.


 
Cyrax ©   (2006-10-24 11:57) [143]

Проанализируй код этой ошибки, прежде чем делать какие-то дальнейшие поспешные умозаключения.

Нет, мне надо всё быстро и сразу...
В справке есть эти коды ?

Это оговорено в ТЗ ?

В общем-то да...

Выбирать тот или иной протокол и принимать решение придется в любом случае тебе, если это не оговорено в ТЗ.

... а делиться опытом ?

На то есть сетевой администратор - он обязан привести сет.настройки раб.станций в соответствие с особенностями и требованиями твоего софта.

Какие именно настройки ?
Отслеживание антивирусами сканирования портов блокировать нежелательно...

Одна из них - NamedPipes, в условиях ЛВС имеющая ряд ощутимых преимуществ перед технологиями/механизмами, ориентированными на Internet.

Насчёт NamedPipes гляну...
А вот по поводу MailSlot"ов: целесообразно ли их использовать для поиска сервера ?


 
Сергей М. ©   (2006-10-24 12:40) [144]


> мне надо всё быстро и сразу


Ишь ты, О.Бендер нашелся) ...


> В справке есть эти коды ?


В справке есть все.


> В общем-то да...


Что значит "в общем-то" ?
Это, извини уж, похоже на "чуть-чуть беременна")
Сдается мне при этом, что ТЗ как такового не существует ..


> а делиться опытом ?


Делюсь - UDP быстр, но ненадежен, TCP надежен, но не быстр.


> Какие именно настройки ?


Профессионалу-сисадмину они д.б. известны.
И это вообще не твое (как разработчика) дело.
Твое дело - описать то что ты реализовал в ТР и представить его заказчику для согласования со специалистами по сет.администрированию.


> целесообразно ли их использовать для поиска сервера ?


Столь же целесообразно, сколь целесообразно использовать UDP - быстро, но ненадежно.


 
Anatoly Podgoretsky ©   (2006-10-24 13:18) [145]


> мне надо всё быстро и сразу...

Быстро только кошки родятся.


 
Cyrax ©   (2006-10-24 13:24) [146]

В справке есть все.

Гляну. Если что - буду ругаться...

Что значит "в общем-то" ?
Это, извини уж, похоже на "чуть-чуть беременна")
Сдается мне при этом, что ТЗ как такового не существует ..

Блин, ушли хрен знает куда... рожать...
Речь идёт о диапазоне адресов, с чего вопрос-то и начался. Ну так как быть с диапазоном портов для UDP-сервера...
Как вообще люди нормальный поиск сервера реализуют (самый распространённый вариант и чуть менее распространённые) ?

Делюсь - UDP быстр, но ненадежен, TCP надежен, но не быстр.

И это весь опыт-то ?

Профессионалу-сисадмину они д.б. известны.
И это вообще не твое (как разработчика) дело.
Твое дело - описать то что ты реализовал в ТР и представить его заказчику для согласования со специалистами по сет.администрированию.

Ну, допустим. С каким вопросом я должен обращаться к "специалистам по системному администрированию" - что-то вроде "Нужно как-то сделать что-то, чтобы антивирусники не ругались..." ?
Ну уж нет. Предпочитаю что-то поконкретнее...

Столь же целесообразно, сколь целесообразно использовать UDP - быстро, но ненадежно.

Зато перебирать порты не придётся... Чем не преимущество перед UDP ?
И вообще, обычно реализуют поиск сервера через MailSlot"ы ?


 
Anatoly Podgoretsky ©   (2006-10-24 14:24) [147]

Они тебе ответят, прекрати скан атаку, администрация тебя уже предупредила и это первый звонок. В локальной сети подобные штуки делать, это ужас, вместо использования не вирус подобных методов.


 
Сергей М. ©   (2006-10-24 14:38) [148]


> Гляну. Если что - буду ругаться...
>


Только не говори потом, мол, искал и не нашел, потому что не туда, мол, смотрел)

Ты инженер или где ?)


> Блин, ушли хрен знает куда... рожать...


Эт точно)... Но я тебя, заметь, за язык не тянул - ты сам начал за здравие и ты сам же продолжил за упокой)


> как быть с диапазоном портов для UDP-сервера...
> Как вообще люди нормальный поиск сервера реализуют


Они его никак не реализуют.
Они , эти самые люди, говорят так: вот вам, к примеру, очередной шедевр в виде такого-то POP3-сервера, оной по таким-то известным соглашениям "сидит" на 110-м порту, а ежели у вас 110-й порт занят, то сервер можно посадить и на любой иной порт, но это уже ваши проблемы.


> С каким вопросом я должен обращаться к "специалистам по
> системному администрированию" - что-то вроде "Нужно как-
> то сделать что-то, чтобы антивирусники не ругались..." ?
>


Да какое тебе нафих дело до антивирусников и прочей не относящиейся к твоей компетенции софтовой тряхомудии ?)

Ты - разработчик, а не кто-то иной !
Да мало ли какая гадость на компе заказчика может мешать работе твоего софта ! В известный момент времени это его, заказчика, проблемы)

В ответ на ТЗ ты сотворил свое подробное ТР и отправил его на согласование представителю Заказчика. Заказчик же тебе, к примеру, вернул отлуп, мол, ТР не годится потому-то и потому-то. Далее ты волен отказаться от реализации проекта, потому как не знаешь иного решения, либо предложить это иное решение.


> Зато перебирать порты не придётся


Что тебя на портах заклинило ?)

Ты софт свой для ЛВС разрабатываешь или для глоб.сети ?
В ТЗ оговорена обязательная реализация трансп.подсистемы на базе IP или это твоя отсебячина ?

С чего ты взял, что в случае mailslots никаких "переборов" нет и в помине ?
"Ты суслика видишь ? И я не вижу. А он есть !" (С)


 
Anatoly Podgoretsky ©   (2006-10-24 15:10) [149]


> Да мало ли какая гадость на компе заказчика может мешать
> работе твоего софта

Предлагаешь убить? Или все таки подчиняться корпоративным или другим правилам.
А то тут получается, какая то гадость постоянно сканирует сеть. Не так не живут в корпоративных сетях и убивается не на гадость которая мешает, а эта программа, как вредная для корпоративной сети, хорошо если автор выживет, а то улица широкая.


 
Сергей М. ©   (2006-10-24 15:15) [150]


> Предлагаешь убить?


Я предлагаю автору представить заказчику подробное ТР, чтобы специалисты заказчика сами могли сделать заключение, годится им это решение или не годится.


 
Anatoly Podgoretsky ©   (2006-10-24 16:00) [151]


> Я предлагаю автору представить заказчику подробное ТР

Это обязательно и если заказчик подпишет, то посылать лесом со всеми претензиями по безопасности, можно будет и отменить, но работу все равно оплатить и отдельно оплатить переделку, но я бы на месте заказчика серьезно задумался бы над подобным и послал бы автора по дальше и далее в соотвествии с договорами.
А если эта штука делается не по заказу, то сам понимаешь куда надо автора посылать?

Пока я не вижу ни одного разумного довода для подобной реализации.


 
Сергей М. ©   (2006-10-24 16:06) [152]


> если эта штука делается не по заказу, то сам понимаешь куда
> надо автора посылать?


Конечно понимаю)

Меня давно подмывает "послать" (в "начинающие" - в самый раз), хотя бы потому как автор изменил до неузнаваемости изначальный сабж.


 
Anatoly Podgoretsky ©   (2006-10-24 16:17) [153]


> в "начинающие" - в самый раз

Моя ошибка, исправлю


 
Cyrax ©   (2006-10-24 19:03) [154]

Удалено модератором
Примечание: Обсуждение модерирования, а насчет угроз пока будут считать, что шутишь, но забанить всегда успеем


 
Leonid Troyanovsky ©   (2006-10-24 19:10) [155]


> Cyrax ©   (24.10.06 19:03) [154]

> Желательно перекинуть эту ветку назад, либо меня забаннить
> (только 2 варианта)...


В качестве третьего предлагаю и то и другое.

--
Regards, LVT.


 
Cyrax ©   (2006-10-24 19:44) [156]

Удалено модератором
Примечание: Повесит здесь, но закрытая и не вздумай восстанавливать, смотри правила.



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

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

Наверх





Память: 0.85 MB
Время: 0.054 c
15-1161585120
луд
2006-10-23 10:32
2006.11.12
Иконки в чате...


5-1142545792
Суслик
2006-03-17 00:49
2006.11.12
Документация в сети по разработке OpenTools


2-1161942939
term1t
2006-10-27 13:55
2006.11.12
statement too long


15-1161328245
dmitry kholl
2006-10-20 11:10
2006.11.12
HTML в RTF


2-1161985394
markers
2006-10-28 01:43
2006.11.12
OverDraw и TreeView





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