-
Здравствуйте ув. мастера! Подскажите какие компоненты использвать для создания чата. Подходят ли компоненты TIdTCPClient и TidTCPServer.
Кроме того я планирую в чате использовать аватары. Причем так, чтобы пользователь мог выбрать свой собственный аватар из файла.
Трудность такая: как эти аватары отправлять? На сервер, а потом с сервера рассылать? Делать ли это в отдельном потоке?
Пока, что я остановился на компонентах TClientSocket и TServerSocket. Cделал класс Tclient такого содеражания: Name,IP:string;
Avatar:integer; //index of ImageList
Socket:Pointer;
ListItem:pointer;
Подскажите на правильном ли я пути. Или может можно проще.
-
> [0] RGV © (20.01.09 03:25)
> Подходят ли компоненты TIdTCPClient и TidTCPServer.
подходят, на них лучше и остановить выбор.
> Cделал класс Tclient такого содеражания: Name,IP:string;
>
> Avatar:integer; //index of ImageList
> Socket:Pointer;
> ListItem:pointer;
> Подскажите на правильном ли я пути. Или может можно проще.
реализация не правильная, но путь правильный, главное не бросай )
-
> подходят, на них лучше и остановить выбор.
А как быть с тем, что у TidTCPClient нет события онрид или подобного? По таймеру чтоль читать? А не будет ли программа подвисать из за этого?
Если всеже использовать этот компонент, то как правильно его настроить?
> реализация не правильная, но путь правильный, главное не бросай
А какая правильная?
-
> [2] RGV © (20.01.09 05:28)
> А как быть с тем, что у TidTCPClient нет события онрид или
> подобного? По таймеру чтоль читать? А не будет ли программа
> подвисать из за этого?
нужно начать с того, что изучить теорию работы сокетов. Инди использует синхронный режим. Т.е. функции отправки/получения данных не возвращают управление, пока операция не будет завершена. вообще с т.з. понимания этот режим гораздо проще асинхронного (того, который используется в TClientSocket и TServerSocket), хотя на первый взгляд может показаться иначе.
чтобы программа не подвисала нужно все действия с сетью выполнять в доп. потоках, а не основном.
-
> нужно начать с того, что изучить теорию работы сокетов
Спасибо за совет, сейчас я этим сейчас и занимаюсь. Читаю "делфи глазами хакера", Эндрю Таненбау "Компьютерные сети".
Буду рад , если дадите ссылку на другую литературу подобного характера.
> чтобы программа не подвисала нужно все действия с сетью
> выполнять в доп. потоках, а не основном.
В потоке создавать соединение? или из потока обращаться к компоненту, но в таком случае не может ли возникнуть тупиковая ситуация?
-
> RGV © (20.01.09 06:39) [4]
Все подобного рода затеи должны начинаться с детальной разработки прикладного протокола информационного обмена, а не с заморочек с компонентами, потоками и прочей лабудой, являющихся не более чем инструментами для реализации этого протокола.
-
Спасибо Сергей М. за совет, в том то и дело во время разработки такого протокола и возникла необходимость проверить на деле как это работает, хочется сразу "пощупать руками". Тут и возникла у меня "тупиковая" ситуация.
-
> возникла необходимость проверить на деле как это работает,
> хочется сразу "пощупать руками"
Для проверки и "прощупки" вовсе не обязательно озадачиваться потоками - это же тест , а не "боевой" режим)
-
Сергей М. это понятно. Мне как-то привычней видеть результат сразу я привык делать проект не "последовательно", а "паралельно" прорабатывая визуальную сторону сперва. Мне бы было проще сначала создать средство или инструмент передачи данных а потом уже конструировать протокол. Поэтому меня интересует любая литература , которая поможет мне в решении поставленной задачи. Итак ... переходя к инструментам... Какже всетаки устроить потоки, из потоков обращаться к компонентам idTCPClient(server) , меня интересует более детальная конструкция.
-
> Какже всетаки устроить потоки
см. класс TThread или функцию BeginThread()
> из потоков обращаться к компонентам idTCPClient(server)
Обращение к этим компонентам в доп.потоке по сути ничем не отличается от обращения в осн.потоке.
-
> Обращение к этим компонентам в доп.потоке по сути ничем
> не отличается от обращения в осн.потоке
а что делать? создавать компонент в потоке чтоли?
-
> [10] RGV © (20.01.09 12:59)
да.
-
тоесть создавать поток при запуске програмы и этот поток будет работать до конца программы?? Как для клиента так и для сервера?
-
Поток следует создавать и уничтожать там и тогда, где и когда это необходимо.
-
Хорошо. Выложу все енто дело в отдельный юнит, допишу и выложу код, для корректировки..
Продолжение следует ...:]