Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание клиент-серверного сетевого чата [D6, WinXP]


Страницы:   1 2 3

Тема ©   (2007-01-07 02:18:00) 

Доброй ночи, уважаемые программисты!У меня возникла проблема. В локальной сети у нас ~150 человек. Хочу написать сетевой чат для этой сети. Естественно он должен быть клиент-серверный при таком количестве человек, UDP тут не катит. Как можно реализовать передачу файлов между пользователями в данной ситуации, минуя прохождение данных через сервер. То есть сервер должен только установить соединение между клиентами, а передача должна идти только между ними, иначе, как вы понимаете сервак будет загружен, и, следовательно, скорость передачи будет просто мизерной.
Мне кажется, надо использовать компоненты IdTCPClient и IdTCPServer с вкладок Indy. С Delphi идет пример чата с использованием этих компонентов, но там только пример передачи строчного сообщения, и принцип такой: клиент отсылает сообщение на сервер, сервер принимает его и через цикл отсылает всем необходимым пользователям (функции WriteLn() и ReadLn()). Если использовать функции WriteStream() и ReadStream() этих компонентов, то принцип передачи потока, как я понимаю, будет осуществляться через сервер и ничего хорошего не получится.
Что делать? Help...


Sha   (2007-01-08 03:17:00) [21]

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


Sha   (2007-01-08 02:32:00) [22]

> Тема   (08.01.07 00:48) [20]
>  Разберись с протоколами.


Зачем мне это, я где-то допустил ошибку или неточность?
Или оставил твой вопрос без ответа? :))


> Я про то, что при передачи через UDP эту целостность надо контролировать самостоятельно
> а если не контролировать, то нет гарантии, что данные полностью дойдут.


Гарантированная доставка пакетов и целостность передаваемых данных -
совершенно разные понятия. И контролируются при помощи разных средств.
Придерживайся, пожалуйста, принятой терминологии.

> [0:23] Gusak вышел из Vypress Chat (превышено время ожидания ответа)
> Это явный пинг. Если нет - докажи.


Это доставка пакетов с подтверждением.


Тема   (2007-01-08 00:48:00) [23]

Sha >>Как связан протокол передачи, с целостностью данных?
Sha <<Напрямую связано. Разберись с протоколами. Любую книгу по TCP/UDP почитай, там написано про целостность данных. Я про то, что при передачи через UDP эту целостность надо контролировать самостоятельно, а если не контролировать, то нет гарантии, что данные полностью дойдут. Поэтому TCP проще в этом отношении и надежнее.
Про пинговку:как ты объяснишь явление, когда клиент нажимает скажем RESET и у всех клиентов в чате он исчезает из списка через некоторое время, ведь тут соединения друг с другом и с сервером нет.
Вот цитата из VyChat:

[0:23] Gusak вышел из Vypress Chat (превышено время ожидания ответа)

Это явный пинг. Если нет - докажи.


Sha   (2007-01-08 00:04:00) [24]

> Dmitrij_K   (07.01.07 22:45) [17]
>> Как связан протокол передачи, с целостностью данных?
> Напрямую связано

Цитату, плиз, про нарушение целостности данных при использовании
протокола UDP. Если не найдешь, можно своими словами объяснить ))


Anatoly Podgoretsky   (2007-01-07 22:52:00) [25]

> Dmitrij_K  (07.01.2007 22:45:17)  [17]

Не приводи ссылок, которые не понимаешь, или когда не понимаешь, что тебе сказали.


Dmitrij_K   (2007-01-07 22:45:00) [26]


> Как связан протокол передачи, с целостностью данных?

Напрямую связано
http://ru.wikipedia.org/wiki/TCP
http://ru.wikipedia.org/wiki/UDP


Sha   (2007-01-07 22:33:00) [27]

> Тема   (07.01.07 18:48) [12]
>> Выбрось эту чушь из головы. Постоянно пинговать нет надобности.
> Есть надобность.

Обоснуй ))

> А насчет UDP я имел ввиду, что при написании клиент-серверного чата надо использовать TCP/IP, а не UDP
>(хотя UDP намного быстрее, любому известно, что в больших сетях UDP не эффективен).

Насколько больших?
Я - любой, но мне не известно. Жду разъяснений, почему не эффективен. ))

> Кстати, про пинговку посмотри :))

Про пинг я знаю гораздо больше, чем ты думаешь ))

> И, кстати, насчет UDP. Я имел ввиду, что его нецелесообразно
> использовать при передаче файлов, т.к. нам нужна целостность данных.

Как связан протокол передачи, с целостностью данных?
У тебя каша в голове.


kaZaNoVa   (2007-01-07 19:04:00) [28]

файлы лучше всего передавать через FTP-сервер .. ИМХО ... никакх проблем с огромными файлами и докачкой .......


kaZaNoVa   (2007-01-07 19:03:00) [29]

Тема   (07.01.07 18:57) [13]
заюзай TCP-IP чат 1 сервер и все к нему коннектятся .. если что могу выложить такую наработку с шифрованием траффика и сжатием !


Тема   (2007-01-07 18:57:00) [30]

Sha <<И, кстати, насчет UDP. Я имел ввиду, что его нецелесообразно использовать при передаче файлов, т.к. нам нужна целостность данных.


Тема   (2007-01-07 18:48:00) [31]

Sha >>Выбрось эту чушь из головы. Постоянно пинговать нет надобности.
Sha <<Есть надобность. А насчет UDP я имел ввиду, что при написании клиент-серверного чата надо использовать TCP/IP, а не UDP (хотя UDP намного быстрее, любому известно, что в больших сетях UDP не эффективен). И это естественно, что в больших сетях целесообразнее использовать клиент-серверный чат. Кстати, про пинговку посмотри :))


Sha   (2007-01-07 17:01:00) [32]

> Тема   (07.01.07 16:48) [9]
> А как по твоему чат узнает кто в данный момент в сети.

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

> Он пингует всю сеть, даже тех у кого чат не запущен

Выбрось эту чушь из головы. Постоянно пинговать нет надобности.

> знающие люди из сети наказывают тех, кто тайком общается в сети
> через эти UDP чаты, ведь тормозит вся сеть от этого

Наказывают все-таки за тормоза и за UDP? :))
Определенно, некоторым писателям вредно чаты писать :))


Anatoly Podgoretsky   (2007-01-07 16:53:00) [33]

> Тема  (07.01.2007 16:48:09)  [9]

> Он пингует всю сеть

Зачем, он что спамер у вас или хакер?


Тема   (2007-01-07 16:48:00) [34]

Sha <<А как по твоему чат узнает кто в данный момент в сети. Он пингует всю сеть, даже тех у кого чат не запущен, поэтому, т.к. в сети более 50 человек, возникают серьезные глюки, и знающие люди из сети наказывают тех, кто тайком общается в сети через эти UDP чаты, ведь тормозит вся сеть от этого.


Sha   (2007-01-07 14:55:00) [35]

> Тема   (07.01.07 14:22) [4]
> ведь каждый клиент каждую секунду пингует всю сеть
> Принцип широковещания такой.

Чушь. Как это связано с UDP multicast?


Тема   (2007-01-07 14:27:00) [36]

Anatoly Podgoretsky <<То есть ты имеешь ввиду, что два клиента на 1000 порту и два других клиента на 1000 порту одной сети будут уживаться нормально, т.к. у них разные IP?


Тема   (2007-01-07 14:24:00) [37]

Dmitrij_K <<Пордон, ведь сервер может вести статистику открытых портов и сканить сеть на порты не надо. Но вопрос все равно в силе, ведь если чат не серверный, а широковещательный UDP, то там сервера нет и как в таком случае открывать порты.
Ведь лучше писать универсальный чат, который при отключении сервера переходит в режим широковещания и наоборот.


Anatoly Podgoretsky   (2007-01-07 14:23:00) [38]

> Тема  (07.01.2007 14:09:02)  [2]

Ты напрасно рассматриваешь порт в отрыве от адреса


Тема   (2007-01-07 14:22:00) [39]

Sha <<По крайней мере чаты VyChat и NASSY не справляются. Естественно, они не справятся, ведь каждый клиент каждую секунду пингует всю сеть, да тех, у кого этот чат не запущен. Принцип широковещания такой. Сеть вообще зависает от этого при таком количестве пингующих клиентов.


Sha   (2007-01-07 14:14:00) [40]

> Тема   (07.01.07 02:18)  
> Естественно он должен быть клиент-серверный
> при таком количестве человек, UDP тут не катит.

Почему естественно?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо