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

Вниз

Проблемы при работе с 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;
Скачать: CL | DM;

Наверх




Память: 0.85 MB
Время: 0.067 c
15-1161153013
LaidBack
2006-10-18 10:30
2006.11.12
Можно застрелиться...


15-1161777727
Vlad
2006-10-25 16:02
2006.11.12
Дублирование сообщений в форумах. Вопрос.


2-1161678395
JTAG
2006-10-24 12:26
2006.11.12
Добрый день, подскажите пожалуйста при помощи каких функция


15-1161960379
IMHO
2006-10-27 18:46
2006.11.12
Сервисы ICQ


2-1161860298
i-am-vladko
2006-10-26 14:58
2006.11.12
Кодировки