Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по сокетам, Как лучше сделать? 
:(
    Опции темы
DoZENT
Дата 17.4.2007, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 2.6.2006

Репутация: нет
Всего: 1



Привет всем! Надо написать сетевое приложение. Клиент: отсылает данные, сервер принимает их, в ответ посылает ответ. Сервер в любой момент должен быть способен получить список подключенных к нему клиентов и оправить каждому клиенту определенную команду. Я так понимаю, с помощю Indy этого нельзя сделать? Там ведь у клиента нет события прихода информации, а также нельзя будет получить список клиентов, ведь коммуникация происходит между методами connect и disconnect??? Или я ошибаюсь?? Просто мне надо поскорее определить, на чем делать сетевую коммуникацию - на Indy или на TClientSocket & TServerSocket


--------------------
Какая боль, какая боль, Internet Explorer 5.0...
PM MAIL   Вверх
Snowy
Дата 17.4.2007, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Как раз в Indy это уже всё сделано.
Скачай IndyDemos и книжку по инди.
PM MAIL   Вверх
DoZENT
Дата 17.4.2007, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 2.6.2006

Репутация: нет
Всего: 1



Для себя я в принципе уже определился, просто из интереса - как из сервера послать инфу клиенту? Как клиент вообще узнает, что ему инфа пришла?


--------------------
Какая боль, какая боль, Internet Explorer 5.0...
PM MAIL   Вверх
Snowy
Дата 17.4.2007, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Какая разница - сервер или клиент.
Разница только на этапе установки подключения.
А после соединения они работают одинаково.
Просто не рви соединение и шли/принимай.
PM MAIL   Вверх
DoZENT
Дата 21.4.2007, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 2.6.2006

Репутация: нет
Всего: 1



Как я понял клиент сможет получать команды только с помощью проверки прихода инфы по таймеру? Т.е.
Код

  Msg := IdTCPClient1.ReadLn('', 5);

  if Msg <> '' then


??? А если мне надо, чтобы клиент реагировал немедленно?


--------------------
Какая боль, какая боль, Internet Explorer 5.0...
PM MAIL   Вверх
AugMaster
Дата 21.4.2007, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 3.8.2006

Репутация: 1
Всего: 1



если есть траблы в понимании инди(сам в нем новайс) - юзай TServerSocket и TClientSocket - там уже есть событие OnRead,.
Чтобы получить список подключенных юзеров, просто используешь TServerSocket..Socket.ActiveConnections и ServerSocket.Socket.Connections[n]         //  n=0..(ActiveConnections-1)
PM MAIL   Вверх
DoZENT
Дата 23.4.2007, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 2.6.2006

Репутация: нет
Всего: 1



Цитата

юзай TServerSocket и TClientSocket

С ними возникла трабла небольшая: от клиента к серверу мне нужно передавать и integer и string и record и потоки... В Indy как-то попроще: типа WriteLn ('@SendString'); WRiteLn ('sending string'); А на сервере обрабатывать первую строку, и в зависимости от нее считывать следующий пакет в соответствующую переменную. А вот как с TServerSocket и TClientSocket такое сделать?


--------------------
Какая боль, какая боль, Internet Explorer 5.0...
PM MAIL   Вверх
Snowy
Дата 24.4.2007, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Цитата(DoZENT @  21.4.2007,  17:39 Найти цитируемый пост)
Как я понял клиент сможет получать команды только с помощью проверки прихода инфы по таймеру?
Нет конечно.
Все данные проходят через OnWork.
Только не забывай проверять WorkMode - что там: write или read.
А вообще Indy - библиотека синхронная, а не событийная.
Так что для постоянной работы лучше вынести работу в отдельный thread и там крутить цикл чтения.
Вся работа выполняется последовательно, как с файлом или консолью - прочитал, обработал, записал, снова читаешь...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0667 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.