Конференция "Сети" » Есть ли событие при приеме пакетов клиентом? [D7, WinXP]
 
  • Салат (06.08.07 12:58) [0]
    Здравствуйте снова, уважаемые! Так получилось, что в моих программах сервер проявляет больше активности, отправляя различные команды клиентам. Подскажите, есть ли событие, которое генерирует IdTCPClient при получении пакетов (с текстом)? В голове одна мысль сделать таймер и в нем tcpClient.ReadLn, но это бред да и лагать будет. Возможно заменить IdTCPClient на сервер? (будут ли два сервера вообще между собой взаимодействовать?)
  • Сергей М. © (06.08.07 13:02) [1]

    > есть ли событие, которое генерирует IdTCPClient при получении
    > пакетов


    Нет.


    > сделать таймер и в нем tcpClient.ReadLn, но это бред


    Эт точно)


    > Возможно заменить IdTCPClient на сервер?


    Невозможно.
  • DVM © (06.08.07 14:19) [2]

    > Салат   (06.08.07 12:58)  

    используй TServerSocket / TClientSocket - они могут работать в асинхронном режиме на сообщениях - имхо для твоей задачи самое то.
  • Сергей М. © (06.08.07 14:33) [3]

    > в моих программах сервер проявляет больше активности


    Это вовсе не повод и не обязательное требование для задействования событийного механизма на стороне клиента.
  • umbra © (06.08.07 14:48) [4]
    сервер вообще не должен проявлять активности, только выполнять команды клиента. Что-то неверно в проекте :)
  • Сергей М. © (06.08.07 14:50) [5]

    > umbra ©   (06.08.07 14:48) [4]


    Ну эт ты явно загнул)

    Сервер серверу все-таки рознь)
  • DVM © (06.08.07 15:18) [6]

    > сервер вообще не должен проявлять активности, только выполнять
    > команды клиента. Что-то неверно в проекте :)

    Нет не всегда. В качестве примера могу привести сервер входящий в большинство цифровых АТС - так называемый Call Manager. Клиенты подключаются к серверу, могут отдавать команды, получать результаты выполнения команд, но, в то же время сервер сам информирует клиентов о наступлении определенных событий, например звонках. Такое реализовано, например, у CISCO.

    Есть и другие примеры, где такое поведение сервера уместно.
  • umbra © (06.08.07 17:18) [7]

    > информирует клиентов

    но не отдает команды. Клиенты сами решают, что им делать. Я о терминологии, а не о конкретных решениях. Клиент - командует, сервер - исполняет (или не исполняет) и информирует.
  • Салат (06.08.07 17:58) [8]
    На моем сервере происходит некий процесс а в клиентах отображается информация об этом процессе плюс они на него могут влиять. Вот и упирается все в то, что в Indy TCP клиенте нет событий, которые происходили бы автоматически при приеме данных. TServerSocket и TClientSocket в delphi 7 нет, вместо них есть TcpClient и TcpServer. Видимо, придется переходить на них.
  • umbra © (06.08.07 18:15) [9]
    >
    > Вот и упирается все в то, что в Indy TCP клиенте нет событий,
    >  которые происходили бы автоматически при приеме данных.
    >

    так и приема никакого не будет, пока Вы метод чтения не вызовете. Зачем же нужно событие, которое случается только после явного вызова метода? Просто читайте из сокета время от времени, как только что-то придет - узнаете после вызова.
  • Салат (06.08.07 19:36) [10]

    > > сделать таймер и в нем tcpClient.ReadLn, но это бред
    > Эт точно)

    А вообще в D7 все таки есть TClientSocket и TServerSocket, просто они не зарегистрированы. Программировать на них предельно просто и нужную функциональность обеспечивают. Я нашел свою прелесть :)
  • Сергей М. © (07.08.07 08:55) [11]

    > Вот и упирается все в то, что в Indy TCP клиенте нет событий,
    >  которые происходили бы автоматически при приеме данных


    В большинстве случаев эти события нафих не нужны.
    Твой случай скорее всего не исключение.
  • valenok © (29.01.08 12:10) [12]
    Я сейчас столкнулся с той же проблемой - пишу чат для локальной сети.
    Думаю, что в этом случае придется создавать потоки с Readln - ом.
  • Сергей М. © (29.01.08 12:12) [13]

    > придется создавать потоки


    Зачем ?
  • Slym © (29.01.08 13:41) [14]
    Сергей М. ©   (29.01.08 12:12) [13]
    Зачем ?

    потому что valenok © :)
    все уже создано до вас...
  • Anatoly Podgoretsky © (29.01.08 14:31) [15]

    >  в то же время сервер сам информирует клиентов о наступлении
    > определенных событий, например звонках. Такое реализовано,
    >  например, у CISCO.

    Так это уже не сервер, а клиент.
    Ты не путай железо и программу, с понятиями клиент сервер. То что одно в чем то еще не означает, что это одна сущность, нет это комбайн.
  • DiamondShark © (29.01.08 16:19) [16]
    Вообще-то, сервер -- это процесс, владеющий слушающим сокетом, клиент, соответственно, -- процесс, инициировавший создание соединения.

    После акцепта соединения процессы не различаются вообще никак.

    Вся остальная псевдоклассификация -- от лукавого.
  • ananast (03.05.08 05:44) [17]
    вы о чем тут?))как вообще делфи включить?)))
  • Сергей М, (03.05.08 19:25) [18]

    > как вообще делфи включить?


    Кнопочку нажать)
 
Конференция "Сети" » Есть ли событие при приеме пакетов клиентом? [D7, WinXP]
Есть новые Нет новых   [134431   +15][b:0][p:0.001]