Форум ОНУ

Гость


Автор Тема: Delphi i Builder  (Прочитано 39395 раз)

Del_programmer

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

или сюда....

student

  • Гость
Delphi i Builder
« Ответ #1 : 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, может это с этим как-то связано ?)

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

Предложения типа: отключить вторую сетевую не принимаются.
Теоретически подобных компьютеров в сети может быть несколько !

Andrew Kosovich

  • Гость
Delphi i Builder
« Ответ #2 : 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 под рукой).

Удачи.

Andrew Kosovich

  • Гость
Delphi i Builder
« Ответ #3 : 28 Апрель 2006, 22:22:54 »
Ну, как окончательный вариант - порыться в исходниках компонентов, или писать сетевую часть на API - там можно точно задвать локальный адрес\порт, правда стоит ли? Отвечать не берусь - все зависит от поставленных задач, времени и знаний.

student

  • Гость
Delphi i Builder
« Ответ #4 : 03 Май 2006, 09:24:12 »
Данная программа - чат (без сервера). В сети стоит програмка Chatter (автор: Дмитрий Андрейчук), которая посылает в сеть на адрес 255.255.255.255 сообщение не зависимо от получателя, а в теле сообщения пишет кому оно адресовано. Иными словами при желании можно читать все сообщения в сети (даже чужии). Я решил переписать эту прогу по-своему, чтобы личные сообщения отправлялись на конкретную машину, а не всем, и чтобы моя прога была полностью совместима с первой.
Тут две проблемы:
1. каждый компьютер имеет "своё состояние" (активный, неактивный, ...) и должен хранить у себя информацию о состоянии других компьютеров (и вообще он должен знать какие включены на данный момент). Я использовал посл. цифру IP для идентификации компьютеров, пока не заметил эту лажу.
2. Подобных компьютеров (с двумя работающими сетевыми картами) в сети может оказаться несколько!

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

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

И еще вопрос: какой компонент можно использовать в Delphi для вывода текста с рисунками (смайликами), и как это грамотно организовать ? В интернете я вроде нашел, что можно использовать RichEdit, но вот как ?(топик в форуме был не то удален, не то перемещен, но я так и ничего не нашел, и в др. форумах тоже)

Eugene

  • Гость
Delphi i Builder
« Ответ #5 : 03 Май 2006, 10:11:23 »
:)  :D  :)  :D
Оно хоть у когото работало ?
255.255.255.255 )
ты хоть на одну подсеть попробуй бродкаст запустить

Andrew Kosovich

  • Гость
Delphi i Builder
« Ответ #6 : 03 Май 2006, 13:16:36 »
Кстати, действительно, попробуй отправить пакет на адрес 192.168.ХХХ.255

Gavrix

  • Гость
Delphi i Builder
« Ответ #7 : 03 Май 2006, 16:21:42 »
действительно, броадкаст лучше не использовать... по крайней мере настолько, на сколько это возможно. броадкаст пакеты сеть пригрузят... немного конечно, но все-таки, зачем мусор пускать в сеть?

student

  • Гость
Delphi i Builder
« Ответ #8 : 04 Май 2006, 14:54:24 »
Цитата: "Eugene"
:)  :D  :)  :D
Оно хоть у когото работало ?


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

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


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

Gavrix

  • Гость
Delphi i Builder
« Ответ #9 : 04 Май 2006, 15:06:49 »
тот механизм, который ты описал, уже реализован на к[cenzored]ьном (IP )уровне:) ты просто продублировал информацию, которая уже содержится в пакете))
почему ты не можешь рассылать пакеты конкретному адресату по его ip, аине рассылать броадкастом и в тексте сообщения писать кому же это сообщение адресовано? броадкаст нужен, когда ты хочешь чтобы одно и тоже сообщение пришло всем хостам в сети. тогда это сообщение отправляется один раз, а не не каждому хосу свое:)

student

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

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

По поводу броадкаста возмущаются все, кому не лень, как я погляжу.
А что можете сказать по второму вопросу (элемент с текстом и смайликами)?

Eugene

  • Гость
Delphi i Builder
« Ответ #11 : 05 Май 2006, 09:40:52 »
Я могу сказать что когда мы начинали использовать бродкаст внутри нашей сети то сообщение приходило к одному компу из 20 )

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

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

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

4 - Ну её эту Дэлюфю - в жизни её не юзал )

student

  • Гость
Delphi i Builder
« Ответ #12 : 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
Автор: Дмитрий Андрейчук


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

В конце концов уважающий себя програмист должен уметь написать программу на любом языке программирования, который он знает, а не только на том, который ему больше нравится. (будет время, займусь изучением других языков, а пока - Делфи). Ведь истинные знания даются только в сравнении!

Andrew Kosovich

  • Гость
Delphi i Builder
« Ответ #13 : 05 Май 2006, 18:16:03 »
Еще один многоадресатный адрес: 224.0.0.1 - он обозначает все компьютеры в данной подсети. Можешь попробовать его попинговать  :D

student

  • Гость
Delphi i Builder
« Ответ #14 : 08 Май 2006, 12:30:19 »
А кто отвечает на этот пинг ?
(моя машина, все сразу или первая попавшаяся ?)