Форум ОНУ

Образование => Вопросы по... => Тема начата: Del_programmer от 03 Октябрь 2005, 13:57:19

Название: Delphi i Builder
Отправлено: Del_programmer от 03 Октябрь 2005, 13:57:19
По вопросам программирования обращайтесь на мыло... :D

или сюда....
Название: Delphi i Builder
Отправлено: student от 27 Апрель 2006, 16:32:07
На компьютере 2 сетевые карты с IP 192.168.XXX.YYY и 192.168.0.1
При посылке сообщения в сеть 192.168.XXX.255 с помощью индиУДПклиента другие компьютеры видят второй его IP, а не первый, как этого хотелось бы. Можно ли как-то узнать второй IP или отправлять сообщение программой с определенной сетевой карты.

(На компьютере настроена "раздача инета" в свою внутреннюю сеть.
Сообщения отправляются для 255.255.255.255, может это с этим как-то связано ?)

Что можно сделать в этом случае ?

Предложения типа: отключить вторую сетевую не принимаются.
Теоретически подобных компьютеров в сети может быть несколько !
Название: Delphi i Builder
Отправлено: Andrew Kosovich от 28 Апрель 2006, 22:08:26
2 student :

Если сетевая маска на обоих интерфейсах 255.255.0.0, то адреса 192.168.XXX.YYY и 192.168.0.1 - принадлежат одной подсети (класса В), либо в твоем случае ХХХ=0 - это раз. Во вторых, при использованиии сокетов Беркли (а именно они используются в Windows) принято не указывать локальную оконечную точку (иными словами сокет на локальной клиентской машине) и она распределяется автоматически исходя из настроенной на машине маршрутизации и наличия свободных портов. Видимо, скорее всего, в таблице маршрутизации первым описан адрес 192.168.0.1, а так как они (оба адреса) в одной подсети, то с него отправить пакет и есть самый короткий маршрут (что и является главной задачей маршрутизации вообще).

Т.е. проверь сетевую маску - это раз, ну и если можно указать локальный адрес явно в свойствах УДПклиента, то укажи его - это два. (в последнем сомневаюсь, т.к. эти компоненты сильно "завуалированы"  :D , а проверить сейчас не могу - нет машины с Windows и Delphi/Builder под рукой).

Удачи.
Название: Delphi i Builder
Отправлено: Andrew Kosovich от 28 Апрель 2006, 22:22:54
Ну, как окончательный вариант - порыться в исходниках компонентов, или писать сетевую часть на API - там можно точно задвать локальный адрес\порт, правда стоит ли? Отвечать не берусь - все зависит от поставленных задач, времени и знаний.
Название: Delphi i Builder
Отправлено: student от 03 Май 2006, 09:24:12
Данная программа - чат (без сервера). В сети стоит програмка Chatter (автор: Дмитрий Андрейчук), которая посылает в сеть на адрес 255.255.255.255 сообщение не зависимо от получателя, а в теле сообщения пишет кому оно адресовано. Иными словами при желании можно читать все сообщения в сети (даже чужии). Я решил переписать эту прогу по-своему, чтобы личные сообщения отправлялись на конкретную машину, а не всем, и чтобы моя прога была полностью совместима с первой.
Тут две проблемы:
1. каждый компьютер имеет "своё состояние" (активный, неактивный, ...) и должен хранить у себя информацию о состоянии других компьютеров (и вообще он должен знать какие включены на данный момент). Я использовал посл. цифру IP для идентификации компьютеров, пока не заметил эту лажу.
2. Подобных компьютеров (с двумя работающими сетевыми картами) в сети может оказаться несколько!

Маска подсети и в первом и во втором случае 255.255.255.0, XXX не равны 0 !

С API я плохо знаком, может порекомендуете какую-нибудь литературу ?

И еще вопрос: какой компонент можно использовать в Delphi для вывода текста с рисунками (смайликами), и как это грамотно организовать ? В интернете я вроде нашел, что можно использовать RichEdit, но вот как ?(топик в форуме был не то удален, не то перемещен, но я так и ничего не нашел, и в др. форумах тоже)
Название: Delphi i Builder
Отправлено: Eugene от 03 Май 2006, 10:11:23
:)  :D  :)  :D
Оно хоть у когото работало ?
255.255.255.255 )
ты хоть на одну подсеть попробуй бродкаст запустить
Название: Delphi i Builder
Отправлено: Andrew Kosovich от 03 Май 2006, 13:16:36
Кстати, действительно, попробуй отправить пакет на адрес 192.168.ХХХ.255
Название: Delphi i Builder
Отправлено: Gavrix от 03 Май 2006, 16:21:42
действительно, броадкаст лучше не использовать... по крайней мере настолько, на сколько это возможно. броадкаст пакеты сеть пригрузят... немного конечно, но все-таки, зачем мусор пускать в сеть?
Название: Delphi i Builder
Отправлено: student от 04 Май 2006, 14:54:24
Цитата: "Eugene"
:)  :D  :)  :D
Оно хоть у когото работало ?


Говорю же: сообщения в этом случае приходят на все компы в сети !!!
По имени компьютера, которое находится внутри сообщения программа сама решает, нужно оно ей или нет !
А в случае компьютеров с двумя сетевыми, свои собственные сообщения, отправленные всем пользователям они получают дважды !
И это не моя идея об таковой организации рассылки сообщений !

Цитата: "Andrew Kosovich"
Кстати, действительно, попробуй отправить пакет на адрес 192.168.ХХХ.255


У меня была такая мысль, но пока ручки не доходят до этого (к тому же для этого надо идти ставить эту прогу на другой комп).
Я сейчас добавляю автоматическое обновление в программу, а потом займусь ее улучшением (не надо будет бегать и везде переустанавливать).
Название: Delphi i Builder
Отправлено: Gavrix от 04 Май 2006, 15:06:49
тот механизм, который ты описал, уже реализован на к[cenzored]ьном (IP )уровне:) ты просто продублировал информацию, которая уже содержится в пакете))
почему ты не можешь рассылать пакеты конкретному адресату по его ip, аине рассылать броадкастом и в тексте сообщения писать кому же это сообщение адресовано? броадкаст нужен, когда ты хочешь чтобы одно и тоже сообщение пришло всем хостам в сети. тогда это сообщение отправляется один раз, а не не каждому хосу свое:)
Название: Delphi i Builder
Отправлено: student от 04 Май 2006, 15:19:18
Цитата: "Gavrix"
тот механизм, который ты описал, уже реализован на к[cenzored]ьном (IP )уровне:) ты просто продублировал информацию, которая уже содержится в пакете))
почему ты не можешь рассылать пакеты конкретному адресату по его ip, аине рассылать броадкастом и в тексте сообщения писать кому же это сообщение адресовано? броадкаст нужен, когда ты хочешь чтобы одно и тоже сообщение пришло всем хостам в сети. тогда это сообщение отправляется один раз, а не не каждому хосу свое:)

Говорю же: я не писал этой проги (читай внимательнее выше) и не мне в голову пришла идея отправлять в пакете имена компьютеров. Ты можешь сам найти эту программу в нете и пообщаться с ее автором, правда на мои два письма он почему-то отвечать не захотел (зачем тогда было указывать мыло в программе :? ).
Я просто хочу написать программу, которая будет работать в этой сети вместо той (у желающих, а у остальных останется старый вариант). Естественно, что программа будет содержать ряд примочек. От броадкаста я уже отказался, но переделаю чуть позже (Просто для начала я сделал полностью совместимую версию программы, а теперь начинаю ее переделывать, насколько это возможно).

По поводу броадкаста возмущаются все, кому не лень, как я погляжу.
А что можете сказать по второму вопросу (элемент с текстом и смайликами)?
Название: Delphi i Builder
Отправлено: Eugene от 05 Май 2006, 09:40:52
Я могу сказать что когда мы начинали использовать бродкаст внутри нашей сети то сообщение приходило к одному компу из 20 )

1 И по твоей отправке 255.255.255.255
оно должно было прийти ко всем компам в МИРЕ

2 Ни один из Наших маршрутизаторов в сети на данный момент бродкаст не пропусти (один есть но не скажу какой и где) поэтому физически такие сообщения будут ходить между виндовыми машинами на уровне только одного свича (и то не всеми машинами)

3- Со второй сетевой нужно внутри винды роуты попрописывать

4 - Ну её эту Дэлюфю - в жизни её не юзал )
Название: Delphi i Builder
Отправлено: student от 05 Май 2006, 17:19:56
Цитата: "Eugene"
Я могу сказать что когда мы начинали использовать бродкаст внутри нашей сети то сообщение приходило к одному компу из 20 )


Внутри нашей сети все нормально работает, все компьютеры исправно получают сообщения и никто не жалуется!

Цитата: "Eugene"
1 И по твоей отправке 255.255.255.255
оно должно было прийти ко всем компам в МИРЕ


Это не "моя отправка" и мне не надо, чтобы "все компы в мире" получали эти сообщения. Все претензии по этому поводу предъявляйте автору программы. Вот отрывок из файла помощи в программе:
Программа Chatter разработана на языке программирования Microsoft Visual C++ v6.0. Напрямую используется Win32 API. Поддерживаются сетевые протоколы IPX и UDP (порт 7000). Сетевой обмен осуществляется с помощью широковещательных дэйтаграмм (datagrams). Программа работоспособна в сетях с низким качеством связи. Протестирована в нескольких локальных сетях Microsoft Network на более чем 20 компьютерах разных конфигураций.
E-mail: winchatter@mail.ru
Автор: Дмитрий Андрейчук


Может я немного запутал картину, но сейчас попробую исправится:
Есть сеть (на витой паре) внутри общежития (несколько свичей и еще больше компьютеров). В каждую из комнат подходит не более одного провода для подключения компьютера! Так как сеть подключена к интернету (через аппаратный роутер), а в некоторых комнатах стоит по два компьютера, то на одном из компьютеров ставится две сетевые карты (никакие роуты прописывать не надо, просто стоит галочка в настройке сетевой карты: "Разрешить другим пользователям использовать это подключение к интернету").
Чат нужен исключительно в рамках здания (через маршрутизатор эти пакеты не идут, если не настроить его соответствующим образом, но это - лишнее). Чат между двумя компьютерами в рамках одной комнаты -  :? (сами понимаете).
Пограмму я просто скачал с нета, поставил и она мне понравилась. Потом я решил, что в ней не хватает смайликов, а так как я лучше всего разбираюсь в делфи, то и решил писать программу на делфях.
Для начала я естественно иследовал работу программы: каким образом идет обмен данными. С этой задачей я справился. Потом я написал рабочую модель, иммитирующую работу этой программы, вот тут-то и всплыли на поверхность все недостатки этой программы:
-можно читать чужие сообщения.
-можно отправлять сообщения якобы с другого компьютера (даже с компьютера, имя которого вообще не может существовать, учитывая ограничения на используемые символы).
-можно добавлять в окно чата имена несуществующих компьютеров и при этом получать сообщения, направленные им.
Все, что меня интересует, так это два вопроса, написанные в самом начале топика и ничего более!

В конце концов уважающий себя програмист должен уметь написать программу на любом языке программирования, который он знает, а не только на том, который ему больше нравится. (будет время, займусь изучением других языков, а пока - Делфи). Ведь истинные знания даются только в сравнении!
Название: Delphi i Builder
Отправлено: Andrew Kosovich от 05 Май 2006, 18:16:03
Еще один многоадресатный адрес: 224.0.0.1 - он обозначает все компьютеры в данной подсети. Можешь попробовать его попинговать  :D
Название: Delphi i Builder
Отправлено: student от 08 Май 2006, 12:30:19
А кто отвечает на этот пинг ?
(моя машина, все сразу или первая попавшаяся ?)
Название: Delphi i Builder
Отправлено: Andrew Kosovich от 08 Май 2006, 12:57:01
Все!
Название: Delphi i Builder
Отправлено: Eugene от 10 Май 2006, 09:54:15
нет ) Первая попавшаяся )
Название: Delphi i Builder
Отправлено: Andrew Kosovich от 10 Май 2006, 11:01:06
Eugene
Ага, как и предполагалось, в винде все не как у людей: действительно, в винде (как минимум при использовании стандартного рing приходит ответ от первой попавшейся машины!).
Вот во FreeBSD, например, получилось так:

$ ping 224.0.0.1
PING 224.0.0.1 (224.0.0.1): 56 data bytes
не надо в следующий раз печатать айпишники машин из 13 подсети пожалуйста - прибъю
сорри  :oops: главное - ты видел - работает! (кто поумнее - попинговать всеравно сможет, такшо ничего книминального я не сделал)
Название: Delphi i Builder
Отправлено: Gavrix от 10 Май 2006, 12:05:49
у тебя дружок с сетевыми технологями совсем плохо...
на пинги широковещательные вообьще ниодна машина в твоей подсети не ответит....я в этом уверен ровно на столько процентов, на сколько сколько уверен в том, что у вас там винды ХРеновые))) они на на такое не отвечают
а вот броадкаст по другим протоколам пойдут, и отвечать на них будут ВСЕ машины, потому что пакеты, даже адресованные напрямую, приходит кор ВСЕМ машинам в сети. тут понятия "первый" или "последний" нет. просто ВСЕМ м все! просто адлресованные конкретному хосту пакеты отфилтьтровываются еще сетевой картой:)
Название: Delphi i Builder
Отправлено: student от 10 Май 2006, 12:31:06
на ping 224.0.0.1 в Win98 ответ приходит, а вот в ХР - нет :!: (в нашей университетской сети, машины стоят рядом и подключены к одному и тому же свичу)
 Gavrix
Речь идет не о BNC сетях, а о сетях построенных на витой паре !
Если в сети стоят не HUB-ы, а SWITCH-и, то пакеты фильтруются еще до сетевой карты прямо в свиче (учи теорию и сверяй с практикой) :!: По крайней мере я ни разу не ловил на своей сетевой карте пакеты, не предназначенные моей машине !

И вообще - мы отклонились от темы. Если есть желание и дальше обсуждать особенности работы локальных сетей, то давайте перенесем это в отдельный топик (предложение для админа)!
Название: Delphi i Builder
Отправлено: Eugene от 10 Май 2006, 12:35:37
1 - По технологии на запрос  224.0.0.1 - машина должна получить первый пришедший к ней ответ и от остальных послать нафиккк

2 - у нас в универе ещё куча умных свичей а не фигни всякой - большинство из них бродкаст не пропустит
Название: Delphi i Builder
Отправлено: Gavrix от 10 Май 2006, 12:41:50
а я вот в отделе колмпьютерной техники ловил пакеты предназначенные для подсети на французком бульваре!!!
ты не пробовал тавить сетевушку сначала в promisc режим? попробуй)) тогда увидишь много интересного :evil:
а по поводу свитчей - ничего они не фильтруют, то есть фильруют конечно, но совсем не то.
свитч - это DTE устройство, в то время как HUB - нет. HUB это многопортовый повторитель.
свитч просто принисает все паекты и генерирует новые, но немножео измененные (по крайней мере поле TTL). фильтрацией адресов свитчи НА ЗАНИМАЮТСЯ!
Название: Delphi i Builder
Отправлено: Andrew Kosovich от 10 Май 2006, 12:44:11
2Eugene :
ХМ, давай, говори источник, откуда технология (особенно интересно, что она не совпадает в разных ОС при том, что всеравно - сокеты Беркли). Мой источник - Книга Д. Камера сети TCP/IP том 1.

Там четко указана табличка с постоянными групповыми адресами:

224.0.0.1 - Все компьютеры в данной подсети.

И действительно пингуется, ты сам видел - ответы приходят от разных машин.

Удачи.
Название: Delphi i Builder
Отправлено: student от 10 Май 2006, 12:50:31
Цитата: "Gavrix"
ты не пробовал тавить сетевушку сначала в promisc режим?

А где это выставляется? или это не на всех сетевых есть?
Название: Delphi i Builder
Отправлено: Gavrix от 10 Май 2006, 12:54:21
Цитировать
А где это выставляется? или это не на всех сетевых есть?

хорошо, а как ты ловил пакеты? для этого существуют специалные программы - снифферы. они сами поставят твою сетевую в нужный режим, это если в винде. в никсах все делается утилитой ifconfig. по ней читай маны.
Название: Delphi i Builder
Отправлено: student от 10 Май 2006, 13:14:26
Я пользовался двумя прогами: одна вроде драйвера (устанавливаешь и нифига не видешь) а другая (вроде WinDump, но может я ошибаюсь, посмотрю, потом точно скажу) использует первую и выводит на экран инфу типа: дата время от кого размер кому протокол. (что-то вроде этого).
Название: Delphi i Builder
Отправлено: Gavrix от 10 Май 2006, 13:36:08
ну так вот windump - самый настоящий сниффер) можный, но не очень удобный. есть и поудобнее...
то что он тебе ничего не показывал - то это скорее, ты его неправильно использовал:)
вобщем суть не в этом. суть в том, что в рамках твоей подсети ты будешь получать ВСЕ пакеты. а свитч - это простой коммутатор, он не делает разделение на подсети. он разделяет только домен коллизий. есть умные свитчи второго, третьего и даже четвертого поколения... они много чего дополнительно умеют.... но самые простые - только коммутируют.
Название: Delphi i Builder
Отправлено: student от 10 Май 2006, 13:58:02
А какой снифер ты бы порекомендовал ?
Название: Delphi i Builder
Отправлено: Gavrix от 10 Май 2006, 14:20:44
не знаю... не посмню уже..... давно было... спроси лучше у googl'а:)
что-то мы отошли от темы..
просто ты имей ввиду, что броадкастами нормальный протокол поднимать не рекоммендуется( это не самый лучший способ... в рамках одной подсети (то сети как у тебя на свитчах) все будет работать.
а вот если сеть рабита на подсети через шлюзы, маршрутизаторы, и прочее, то тут начнуться разные нюансы.
используй точные статические адреса. это наилучший вариант. чем он тебе не подходит?
Название: Delphi i Builder
Отправлено: student от 10 Май 2006, 15:11:09
Цитата: "Gavrix"
что-то мы отошли от темы..

Я про это уже писал чуть выше и предлагаю перенести это все в отдельную тему (только лучше чтобы это сделал администратор, чтобы все сообщения касающиеся "нюансов работы сети" остались в первоначальном виде).

Цитата: "Gavrix"
просто ты имей ввиду, что броадкастами нормальный протокол поднимать не рекоммендуется

На это я уже тоже отвечал и не один раз (еще на 1-ой странице начал).
Название: Delphi i Builder
Отправлено: Gavrix от 10 Май 2006, 15:16:04
а я не прошу тебя отвечать! я говорю, что никто, кроме того разработчика, у которого ты спер это чудо, так не делает!!
сделай по-новому и по-человечески:) если трудности - поможем)
Название: Delphi i Builder
Отправлено: student от 10 Май 2006, 15:19:27
Ну извени, если я не правильно понял.
Цитата: "Gavrix"
у которого ты спер это чудо

Я не спер, а скачал. Программа распространяется бесплатно и без ограничений.

А по поводу стат. адресов :
 Адреса в сети могут менятся время от времени в диапазоне от 2 до 250, поэтому я использую таблицу, в кот. заносятся данные во время работы программы.

Трудность пока одна: никак не могу понять, как в текст воткнуть смайлики ?
Максимум, что у меня получилось, это хранить рядом с программой картинки смайликов, когда надо генерировать HTML файлик и открывать его на форме (ОЧЕНЬ НЕУДОБНО) :!:
Название: Delphi i Builder
Отправлено: Gavrix от 10 Май 2006, 15:22:38
так вот оно что)) смайлики....
ну тут тебе либо стоит спросить где-то на рсдн (www.rsdn.ru) либо где-то на более специализированных по дельфи ресурсах. я знаю только как это на вижуале делается....
Название: Delphi i Builder
Отправлено: student от 10 Май 2006, 15:27:11
Проснулись...
Я с самого начала про это писал. То, что на вижуале это делается я знаю. Мне интересно зделать это именно на делфе. В одном форуме я таки нашел нужную тему, но там было написано, что она перенесена в раздел для начинающих, а там я ничего вообще не нашел !!!
Название: Delphi i Builder
Отправлено: Gavrix от 10 Май 2006, 15:33:57
www.rsdn.ru
Название: Delphi i Builder
Отправлено: student от 11 Май 2006, 15:30:36
На www.rsdn.ru ничего не смогли предложить кроме TWebBrowser, а я хочу хранить смайлики прямо в exe-шнике, и чтоб текст писать можно было не только в строке снизу, но и в самом поле+чтобы не было всех этих експлорерных менюшек. На www.rsdn.ru предлагают, как избавится от менюшек и др. вещей, но уж больно это муторно. Неужели других вариантов нет ?

Кстати на ping 224.0.0.1 Win2K ведет себя [cenzored]огично WinXP.
Название: Delphi i Builder
Отправлено: Andrew Kosovich от 11 Май 2006, 17:41:03
Используй TListBox. В нем установи Style в lbOwnerDrawVariable и рисуй абсолютно все руками (я так кадато делал)

Удачи
Название: Delphi i Builder
Отправлено: student от 12 Май 2006, 05:25:05
Видимо такая задача сходу в Делфи не решается !
Если чего путного придумаю, обязательно выложу !
Название: Delphi i Builder
Отправлено: Del_programmer от 25 Май 2006, 17:00:01
ты смотрика темка то прижилась 8)
Название: Delphi i Builder
Отправлено: student от 29 Май 2006, 15:13:16
У меня тут родилась одна интересная идея про смайлики, правда она с программированием слабо связана: Можно просто взять TMemo (или че другое) и в свойстфе Font указать свой шрифт, заранее созданный и устанавливаемый на комп вместе с программой. Как вы уже догадались: смайлики будут в виде букв, правда они не будут анимированными. По крайней мере такой идеи я нигде не встречал, хотя зделать это не так уж сложно.
Название: Re: Delphi i Builder
Отправлено: marinatour от 03 Июнь 2011, 21:51:16
твоя машина