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...


Тема   (2007-01-07 14:09:00) [41]

То есть получается, можно сделать так. Серверное приложение содержит TServerSocket. Клиенты будут иметь один компонент TClientSocket для постоянной связи с сервером и еще два компонента TClientSocket и TServerSocket для кратковременной связи между собой при передаче файлов (либо компоненты Indy).
Тогда 1 вопрос.Если, например, один клиент открывает порт скажем 1000 и принимает файл от другого клиента, и третий клиент открывает тоже 1000 порт и принимает файл от четвертого клиента, то что произойдет. И если так делать нельзя, то что делать? Перед передачей файла сканить сеть на открытые порты и открывать клиенту свободный порт?, что весьма напряжно. Или можно все делать на одном порте, ведь клиенты разные?
И еще вопросик.Я уже реализовывал такой принцип при модемном соединении двух компов, но возникла проблема: только один из компов мог открывать порт на прослушивание, то есть, например, когда 1 комп передавал запрос на открытие порта на 2, то 1 не мог соединиться со вторым, только 2 мог соединиться с первым. От чего это могло зависеть? Иза модемного соединения или нет?


Dmitrij_K   (2007-01-07 03:15:00) [42]

Общий алгоритм передачи файла.
1.Принимающая сторона открывает порт для прослушивания.
2.Отдающий соединяется с принимающим.
3.Отдающий посылает имя файла, размер его и само содержание файла принимающей стороне.
4.Принимающий читает имя файла, его размер и читает данные из сокета
5.Оба разрывают соединение

На каком пункте проблема?
----------------------------
ЗЫ
Примеров в сети навалом, искать надо уметь.


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

Наверх

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