| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Послать сообщение всем клиентам. |
| Автор: _Rin 13.9.2006, 10:15 |
| Пишу чат на Indy. Клиенты посылают сообщения серверу. Сервер выводит их у себя в Memo-поле с указанием от кого пришло. Как серверу переслать сообщение, пришедшее от одного клиента, всем другим клиентам, чтобы они тоже могли вывести его у себя на форме. Помогите плизз!!! http://forum.vingrad.ru/html/emoticons/qstn.gif |
| Автор: Snowy 13.9.2006, 10:19 |
| Посмотри темы внизу страницы. |
| Автор: _Rin 13.9.2006, 10:41 |
| Смотрела. Но все равно не понимаю. Столкнулась с Indy первый раз. Есть обработчик TCPServerExecute(AThread: TIdPeerThread); Сервер получает сообщение от одного клиента, выводит его в Memo, а затем шлет ответ этому клиенту о том, что все принял правильно. Как сделать так, что бы это сообщение могли получить и другие клиенты, подсоединеные в данный момент к серверу (я знаю их IP и порты). http://forum.vingrad.ru/html/emoticons/stena.gif |
| Автор: Alexeis 13.9.2006, 10:53 |
| _Rin, Пробовала использовать адрес типа 192.168.0.255 такие сообщения обычно идут всем клиентам диапазона 192.168.0.0 - 192.168.0.254 |
| Автор: Snowy 13.9.2006, 12:18 |
| У TIdTCPServer есть свойство Bindings - это и есть массив подключенных клиентов. Выбирай нужного и шли что хочешь. |
| Автор: _Rin 13.9.2006, 14:55 | ||
| Спасибо за помощь, я нашла подходящий пример и во всем разобралась. Но возникла новая проблема. Пытаюсь подключится к серверу, и периодически возникает ошибка Connection Closed Gracefully. (именно периодически, клиент может подсоединится и нормально, без ошибок). В чем может быть причина, и как её устранить. Код клиента:
|
| Автор: Snowy 13.9.2006, 15:05 |
| Модератор: Пожалуйста, используйте кнопку "Код" для выделения кода А то я уже устал править за Вами все сообщения. Смысл ошибки - не удалось подключиться. Возможно сервер занят или у него ограничение по количеству подключений, или он просто не работает. |
| Автор: _Rin 13.9.2006, 15:13 |
| Ладушки: буду использовать Кнопку "Код". На счет сервера: - сервер работает (свойство Active - устанавливаю в true) - сообщение может выскочить, даже если подключается первый клиент (то есть никаких других подключений у сервера нет). - ограничений на количество подоключений тоже нет. Не знаю, в чем дело. |
| Автор: Snowy 13.9.2006, 15:22 |
| Аналогично. Может у сервера плохое настроение, голова болит... Ну не хочет он принимать подключение. Можно попробовать делать 3 попытки подключения вместо одной. А так - гадание на кофейной гуще. Здесь всё совсем не очевидно. Самая сложная в отлове ошибка - нестабильная. Может выскочить, а может и нет... |
| Автор: _Rin 13.9.2006, 15:24 |
| Все заработало. Ошибка была на строне сервера. Выделение памяти надо было делать не GetMem/Free, а New/Dispose. |