Конференция "Сети" » Чат для интернета [D7, WinXP]
 
  • RGV © (20.01.09 03:25) [0]
    Здравствуйте ув. мастера! Подскажите какие компоненты использвать для создания чата. Подходят ли компоненты TIdTCPClient и TidTCPServer.
    Кроме того я планирую в чате использовать аватары. Причем так, чтобы пользователь мог выбрать свой собственный аватар из файла.
    Трудность такая: как эти аватары отправлять? На сервер, а потом с сервера рассылать? Делать ли это в отдельном потоке?
    Пока, что я остановился на компонентах TClientSocket и TServerSocket. Cделал класс Tclient такого содеражания: Name,IP:string;
    Avatar:integer; //index of ImageList
    Socket:Pointer;
    ListItem:pointer;
    Подскажите на правильном ли я пути. Или может можно проще.
  • Eraser © (20.01.09 04:19) [1]
    > [0] RGV ©   (20.01.09 03:25)


    > Подходят ли компоненты TIdTCPClient и TidTCPServer.

    подходят, на них лучше и остановить выбор.

    > Cделал класс Tclient такого содеражания: Name,IP:string;
    >
    > Avatar:integer; //index of ImageList
    > Socket:Pointer;
    > ListItem:pointer;
    > Подскажите на правильном ли я пути. Или может можно проще.

    реализация не правильная, но путь правильный, главное не бросай )
  • RGV © (20.01.09 05:28) [2]

    > подходят, на них лучше и остановить выбор.


    А как быть с тем, что у TidTCPClient нет события онрид или подобного? По таймеру чтоль читать? А не будет ли программа подвисать из за этого?

    Если всеже использовать этот компонент, то как правильно его настроить?


    > реализация не правильная, но путь правильный, главное не  бросай


    А какая правильная?
  • Eraser © (20.01.09 05:39) [3]
    > [2] RGV ©   (20.01.09 05:28)


    > А как быть с тем, что у TidTCPClient нет события онрид или
    > подобного? По таймеру чтоль читать? А не будет ли программа
    > подвисать из за этого?

    нужно начать с того, что изучить теорию работы сокетов. Инди использует синхронный режим. Т.е. функции отправки/получения данных не возвращают управление, пока операция не будет завершена. вообще с т.з. понимания этот режим гораздо проще асинхронного (того, который используется в TClientSocket и TServerSocket), хотя на первый взгляд может показаться иначе.
    чтобы программа не подвисала нужно все действия с сетью выполнять в доп. потоках, а не основном.
  • RGV © (20.01.09 06:39) [4]

    > нужно начать с того, что изучить теорию работы сокетов

    Спасибо за совет, сейчас я этим сейчас и занимаюсь. Читаю "делфи глазами хакера", Эндрю Таненбау "Компьютерные сети".
    Буду рад , если дадите ссылку на другую литературу подобного характера.


    > чтобы программа не подвисала нужно все действия с сетью
    > выполнять в доп. потоках, а не основном.


    В потоке создавать соединение? или из потока обращаться к компоненту, но в таком случае не может ли возникнуть тупиковая ситуация?
  • Сергей М. © (20.01.09 08:29) [5]

    > RGV ©   (20.01.09 06:39) [4]


    Все подобного рода затеи должны начинаться с детальной разработки прикладного протокола информационного обмена, а не с заморочек с компонентами, потоками и прочей лабудой, являющихся не более чем инструментами для реализации этого протокола.
  • RGV © (20.01.09 08:32) [6]
    Спасибо Сергей М. за совет, в том то и дело во время разработки такого протокола и возникла необходимость проверить на деле как это работает, хочется сразу "пощупать руками". Тут и возникла у меня "тупиковая" ситуация.
  • Сергей М. © (20.01.09 08:56) [7]

    > возникла необходимость проверить на деле как это работает,
    >  хочется сразу "пощупать руками"


    Для проверки и "прощупки" вовсе не обязательно озадачиваться потоками - это же тест , а не "боевой" режим)
  • RGV © (20.01.09 10:39) [8]
    Сергей М. это понятно. Мне как-то привычней видеть результат сразу я привык делать проект не "последовательно", а "паралельно" прорабатывая визуальную сторону сперва. Мне бы было проще сначала создать средство или инструмент передачи данных а потом уже конструировать протокол. Поэтому меня интересует любая литература , которая поможет мне в решении поставленной задачи. Итак ... переходя к инструментам... Какже всетаки устроить потоки, из потоков обращаться к компонентам idTCPClient(server) , меня интересует более детальная конструкция.
  • Сергей М. © (20.01.09 10:57) [9]

    > Какже всетаки устроить потоки


    см. класс TThread или функцию BeginThread()


    > из потоков обращаться к компонентам idTCPClient(server)


    Обращение к этим компонентам в доп.потоке по сути ничем не отличается от обращения в осн.потоке.
  • RGV © (20.01.09 12:59) [10]

    > Обращение к этим компонентам в доп.потоке по сути ничем
    > не отличается от обращения в осн.потоке

    а что делать? создавать компонент в потоке чтоли?
  • Eraser © (20.01.09 13:07) [11]
    > [10] RGV ©   (20.01.09 12:59)

    да.
  • RGV © (20.01.09 13:21) [12]
    тоесть создавать поток при запуске програмы и этот поток будет работать до конца программы?? Как для клиента так и для сервера?
  • Сергей М. © (20.01.09 13:25) [13]
    Поток следует создавать и уничтожать там и тогда, где и когда это необходимо.
  • RGV © (21.01.09 04:33) [14]
    Хорошо. Выложу все енто дело в отдельный юнит, допишу и выложу код, для корректировки..

    Продолжение следует ...:]
 
Конференция "Сети" » Чат для интернета [D7, WinXP]
Есть новые Нет новых   [134435   +33][b:0][p:0]