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