![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание клиент-серверного сетевого чата [D6, WinXP]
Тема © (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 тут не катит.
Почему естественно?