Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Чат для локальной сети

13K
15 февраля 2006 года
orel
14 / / 15.02.2006
Нужно написать курсовой - чат по локальной сети на Делфи7. Желательно через TCP/IP. Посоветуйте что-нибудь типа "TCP/IP для чайников";)
243
15 февраля 2006 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by orel
Нужно написать курсовой - чат по локальной сети на Делфи7. Желательно через TCP/IP. Посоветуйте что-нибудь типа "TCP/IP для чайников";)


По поводу чайников - не знаю, но вообще, книжка хорошая: http://www.zeiss.net.ru/docs/technol/tcpip/tcp00.htm
Может за тебя написать? За n-ную сумму разумеется :)

16K
15 февраля 2006 года
gbirx
1 / / 15.02.2006
Цитата:
Originally posted by orel
Нужно написать курсовой - чат по локальной сети на Делфи7. Желательно через TCP/IP. Посоветуйте что-нибудь типа "TCP/IP для чайников";)



Попробуй использовать сокеты (с ними никакого TCP/IP ты и не узнаешь). Можно посложнее tcp-сервер и tcp-клиент.

Я давно под Windows не программировал -- поэтому сейчас рекомендую сокеты -- удобнее ничего нет ;-)

13K
18 февраля 2006 года
orel
14 / / 15.02.2006
Цитата:
Originally posted by pacific_7
По поводу чайников - не знаю, но вообще, книжка хорошая: http://www.zeiss.net.ru/docs/technol/tcpip/tcp00.htm
Может за тебя написать? За n-ную сумму разумеется :)



За книжку спасибо.
Хотелось бы справиться самому, я еще никогда не работал с сетями.
Я, кажется, нашел, через что лучше всего делать чат в Делфи7 (Internet - TcpServer & TcpClient)
Во всяком случае, в демке использованы именно они.
Теперь другая проблема - как найти работающий сервер?
Предполагается, что экзэмпляр проги сможет работать и как клиент, и как сервер, и при этом может быть сразу несколько серверов, в каждом из которых идет отдельная беседа. Беда в том, что при запуске мне не известно о сервере ничего, кроме номера открытого порта (номер порта я установлю сам :)).
Или мне лучше сменить архитектуру, и вести все беседы на одном сервере? Крайне не хотелось бы вводить отдельный экзэмпляр проги под сервер, чтобы остальные были клиентами.
Подскажите, что выбрать, плиз:???:

243
18 февраля 2006 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by orel
Теперь другая проблема - как найти работающий сервер?
Предполагается, что экзэмпляр проги сможет работать и как клиент, и как сервер, и при этом может быть сразу несколько серверов, в каждом из которых идет отдельная беседа.


Вах! Ты не знаешь просто, как работает обычный чат. А чат работает очень просто, и TCP тебе тут не надо совершенно. Тут надо UDP. Отправлять широковещательные пакеты на всю подсеть. Каждый экземпляр проги, это тебе и сервер, и клиент. Алгоритм получения адреса, на который надо слать пакеты, что бы их получала вся подсеть прост:
1. Определяем текущий IP и маску твоей подсети.
2. По полученным данным определяем широковещательный адрес для данной подсети. Сделать это можно так:

 
Код:
max_addr = ~subnet_mask;//ВЫЧИСЛЯЕМ МАКСИМАЛЬНЫЙ АДРЕС В ПОДСЕТИ
                        //ИНВЕРТИРУЯ МАСКУ
subnet_boradcast = subnet_ip | max_addr;//ВЫЧИСЛЯЕМ ШИРОКОВЕЩАТЕЛЬНЫЙ
            //АДРЕС ПРИ ПОМОЩИ ЛОГИЧЕСКОГО "ИЛИ"

Отправляем пакеты на него. Будет получать вся подсеть. Т.е. например, если у тебя адрес в сети 192.168.1.15 при маске 24 бита (т.е. 255.255.255.0), то широковещательный адрес получится 192.168.1.255 и всё, что будет отправлено на него будет получено всеми хостами подсети 192.168.1.0 т.е. 192.168.1.1 - 192.168.1.254
Для лучшего усвоения книжки, и вообще понимания работы сети советую скачать windump - аналог *nix-ового tcpdump'а. Правда глюковат слегка ;). Ну и nmap тоже не помешает. Обе эти проги для полноценной работы в windows требуют комплект библиотек winpcap, ссылка на который там присутствует.
13K
19 февраля 2006 года
orel
14 / / 15.02.2006
Цитата:
Originally posted by pacific_7
Вах! Ты не знаешь просто, как работает обычный чат.


Знал бы, не спрашивал бы.;)

Цитата:
Originally posted by pacific_7
1. Определяем текущий IP и маску твоей подсети.


Это как? В смысле, можно стандартными средствами Делфи, или нужно что-то еще?

Цитата:
Originally posted by pacific_7

 
Код:
max_addr = ~subnet_mask;//ВЫЧИСЛЯЕМ МАКСИМАЛЬНЫЙ АДРЕС В ПОДСЕТИ
subnet_boradcast = subnet_ip | max_addr;//ВЫЧИСЛЯЕМ ШИРОКОВЕЩАТЕЛЬНЫЙ
            //АДРЕС ПРИ ПОМОЩИ ЛОГИЧЕСКОГО "ИЛИ"


Если можно, приводи примеры на Паскале, я только начал учить Си. Если я верно понял код, то он делает вот что:

 
Код:
max_addr:=not subnet_mask;
subnet_broadcast:=subnet_ip or max_addr;

243
19 февраля 2006 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by orel
Знал бы, не спрашивал бы.;)


Ну... Я не думал, что все так запущено :)

Цитата:
Originally posted by orel
Это как? В смысле, можно стандартными средствами Делфи, или нужно что-то еще?


Мммм... Честно говоря, на Делфях вообще мало что делал. На Win API - легко. А в Делфи кажись нет таких средств. Так же как и в Билдере.
Смотри на http://msdn.microsoft.com функцию GetAdaptersInfo(...). Она тебе поможет разрешить проблемы с адресом и маской. Правда там написано в расчете на Си, но на Паскаль переделать не проблема, если знаешь Паскаль.

Цитата:
Originally posted by orel
Если можно, приводи примеры на Паскале, я только начал учить Си.


Низя :) Лень напрягаться. Паскаль - давно уже был.

Цитата:
Originally posted by orel
Если я верно понял код, то он делает вот что:
 
Код:
max_addr:=not subnet_mask;
subnet_broadcast:=subnet_ip or max_addr;


Верно понял. Но главное - что бы ты понял идею, а не этот кусочек кода. А тут нужно чуток теории знать что бы понять. Но думаю тебе еще хватит времени.

13K
19 февраля 2006 года
orel
14 / / 15.02.2006
Цитата:
Originally posted by pacific_7
На Win API - легко.


WinAPI так WinAPI, но я еще пороюсь в Делфях, вдруг чего узнаю.

Цитата:
Но думаю тебе еще хватит времени.


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

243
19 февраля 2006 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by orel
Времени куча, да и выбор темы еще не оформлен. Если совсем зайду в тупик, выберу что-нибудь другое, хотя будет чертовски жаль.:(


Да ладно тебе. Тут делов то на день.
Если возьмешься, то разрулишь до сдачи. Она ведь летом, в июне?

13K
20 февраля 2006 года
orel
14 / / 15.02.2006
Цитата:
Originally posted by pacific_7
Да ладно тебе. Тут делов то на день.
Если возьмешься, то разрулишь до сдачи. Она ведь летом, в июне?


На день? Хехе:) Нет, мне тут надо врубаться и врубаться, а ведь есть еще и др. дисциплины. Преподы ходят вокруг стаей голодных волков.
Когда сдача, еще не узнал.
Вот, кстати, нашел в Делфе такую вещь:
компонент IdUDPServer метод Broadcast - посылает данные на всю сеть. Вроде как он шлет данные как обычно, но на адрес 255.255.255.255 Сработает ли такой финт?
Этот компонент мне не очень нравится, слишком тесный, заточен под пересылку строк.
Главная проблема - как узнать, что к тебе пришли какие-то данные :???: Периодически пытаться что-нибудь считать? Блин, и почему разработчики не сделали события OnDataReceived?:x

243
21 февраля 2006 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by orel
На день? Хехе:) Нет, мне тут надо врубаться и врубаться, а ведь есть еще и др. дисциплины. Преподы ходят вокруг стаей голодных волков.
Когда сдача, еще не узнал.


Кстати, тебе обязательно на Делфях?

Цитата:
Originally posted by orel
Вот, кстати, нашел в Делфе такую вещь:
компонент IdUDPServer метод Broadcast - посылает данные на всю сеть. Вроде как он шлет данные как обычно, но на адрес 255.255.255.255 Сработает ли такой финт?


Попробуй, должен сработать - чаты в основном так и работают. Но все равно это будет действовать только в пределах одной подсети, а не всей сети в целом, т.к. подобные пакеты убиваются маршрутизаторами, когда попадают на них. А между подсетями стоят маршрутизаторы. Если слать направленные broadcast-пакеты, например 192.168.0.255 (при маске подсети 24 бита), то такие пакеты будут переправлены из одной подстети в другую. Т.е. можно расширить область действия твоего чата хоть в инет :)

Цитата:
Originally posted by orel
Этот компонент мне не очень нравится, слишком тесный, заточен под пересылку строк.
Главная проблема - как узнать, что к тебе пришли какие-то данные :???: Периодически пытаться что-нибудь считать? Блин, и почему разработчики не сделали события OnDataReceived?:x


Ну и напиши на WIN API. Только придется постоянно слушать UDP-сокет в потоке. Но это нормально. За то ни каких проблем не возникнет с периодическим опросом сокета.

2
21 февраля 2006 года
squirL
5.6K / / 13.08.2003
хм... я конечно не хочу вмешиваться в ликбез, но будь я администратором сети, в которой будет работать чат - оторвал бы руки. нафига повышать броадкасты в сети? когда проще - сделать ОДИН выделенный сервер и коннектится к нему. тогда не будет проблем с маршрутизаторами, VLAN и т. п.
243
21 февраля 2006 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by squirL
хм... я конечно не хочу вмешиваться в ликбез, но будь я администратором сети, в которой будет работать чат - оторвал бы руки. нафига повышать броадкасты в сети? когда проще - сделать ОДИН выделенный сервер и коннектится к нему. тогда не будет проблем с маршрутизаторами, VLAN и т. п.


Согласен полностью. Но см. начало. Это тема курсовика. Помоему вполне нормальная тема. Есть неплохой повод более-менее в теории разобраться. А если разберешься, то уж точно поймешь, что так делать не требуется. Да и смотря какие сети еще. Если нормальная сетка, то да. А если это просто любительская сетка в которой 10-20 компов? В ней может и не быть желающих ставить нормальный выделенный сервер. В общем - пусть человек делает так, как ему сейчас хочется.

2
21 февраля 2006 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by pacific_7
Согласен полностью. Но см. начало. Это тема курсовика. Помоему вполне нормальная тема. Есть неплохой повод более-менее в теории разобраться. А если разберешься, то уж точно поймешь, что так делать не требуется. Да и смотря какие сети еще. Если нормальная сетка, то да. А если это просто любительская сетка в которой 10-20 компов? В ней может и не быть желающих ставить нормальный выделенный сервер. В общем - пусть человек делает так, как ему сейчас хочется.


ну ты знаешь мое отношение к написанию программ по принципу "как хочется". да написать полноценный клиент серверный чат - лучший способ познать теорию чем писать очередной недоделанный net send...

13K
21 февраля 2006 года
orel
14 / / 15.02.2006
Цитата:
Originally posted by pacific_7
Кстати, тебе обязательно на Делфях?


Да.

Цитата:

Т.е. можно расширить область действия твоего чата хоть в инет :)


Нет уж, спасибо.:)

Цитата:

Ну и напиши на WIN API. Только придется постоянно слушать UDP-сокет в потоке. Но это нормально. За то ни каких проблем не возникнет с периодическим опросом сокета.


Видишь ли, я вообще не знаю WinAPI! Точнее, теоретически знаю, но не хочется с ними иметь дело без крайней (КРАЙНЕЙ!) нужды.

Цитата:

смотря какие сети


Чат должен "работать" в сети аудитории, можно даже без выхода на общеинститускую.

Цитата:
Originally posted by squirl
сети, в которой будет работать чат


А кто сказал, что он будет работать?:) Курсовой, похоже, придется писать по принципу "сделал - показал - сдал - стер и забыл как кошмарный сон".
Все равно препод - ТУПОЙ, и не поймет, оптимален код чата или нет.

243
22 февраля 2006 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by squirL
ну ты знаешь мое отношение к написанию программ по принципу "как хочется". да написать полноценный клиент серверный чат - лучший способ познать теорию чем писать очередной недоделанный net send...


Тут позволю не совсем согласится. Просто все говорят, что де, вот так вот хорошо, а вот так - плохо. Мне кажется, что если это не фатально (как с наркотиками например) и есть возможность, то человеку лучше всего самому проверить оба варианта. Что бы железно усвоить - почему хорошо, и почему плохо.
И все же в некоторых условиях для постоянной передачи информации нужен именно UDP, или ты не согласен? :)

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

Цитата:
Originally posted by orel
Видишь ли, я вообще не знаю WinAPI! Точнее, теоретически знаю, но не хочется с ними иметь дело без крайней (КРАЙНЕЙ!) нужды.


Ну я вообще не знаю VCL-компоненты для работы с сетью. Все делаю на API. Так что, если буш делать на них, то я тебе точно не помощник. Т.к. за просто так мне не хочется изучать совершенно не нужный материал.

2
22 февраля 2006 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by pacific_7
Тут позволю не совсем согласится. Просто все говорят, что де, вот так вот хорошо, а вот так - плохо. Мне кажется, что если это не фатально (как с наркотиками например) и есть возможность, то человеку лучше всего самому проверить оба варианта. Что бы железно усвоить - почему хорошо, и почему плохо.


если оба - отлично. только вот не факт, что попробовав оба, человек выберет нужный. он выберет тот, что покажется более легким. а иногда вообще не станет пробовать оба.

Цитата:
Originally posted by pacific_7

И все же в некоторых условиях для постоянной передачи информации нужен именно UDP, или ты не согласен? :)


UDP хорошь в очень немногих случаях. например когда не нужна гарантия доставки пакета или когда
эта гарантия мешает. в локальной сети TCP работает даже побыстрее. но впринципе - все равно . чем хочет, тем пусть и пользуется. в Микрософтовской локалке вообще без TCP/IP можно обойтись :)

243
22 февраля 2006 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by squirL
если оба - отлично. только вот не факт, что попробовав оба, человек выберет нужный. он выберет тот, что покажется более легким. а иногда вообще не станет пробовать оба.


Ну... Тогда тут учить чему-то бесполезно. Такой человек будет делать только по шаблонам.

Цитата:
Originally posted by squirL
UDP хорошь в очень немногих случаях.


Ммм... Хотя бы DHCP и SNMP- хочешь сказать, что это очень немного? А передача поткового трафика? Помоему совсем не мало уже.

13K
22 февраля 2006 года
orel
14 / / 15.02.2006
Цитата:
Originally posted by pacific_7
мне не хочется изучать совершенно не нужный материал


А я тебя и не заставляю.;)
Можно договорится так - ты подсказываешь ЧТО конкретно делать, я ищу соотв. возможности в Делфи.
Кстати, вопрос с определением своего IP снят.

9
11 мая 2008 года
Lerkin
3.0K / / 25.03.2003
Цитата: Mandrake_64
Реализовать чат через сокеты очень просто, я такой написал, он даже мультипользовательский... Один создаёт сервер, остальные подключаются. Необязательно по локальной сети можно и по инету общатся. Хороший "путеводитель" тут: http://pblog.ru/?p=100
[RIGHT]Mandrake_blog[/RIGHT]


Еще один рекламщик-гробокопатель...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог