[Cascavel-pm] Re: IO::Socket e IO::Select

Ednardo Lobo ednardo em elobo.cjb.net
Quinta Janeiro 9 17:33:21 CST 2003


On Wed, Jan 08, 2003 at 10:04:49AM -0200, Luiz Gonzaga Pinto Jr wrote:
> Olá, pessoal,
>
    Oi, tudo bom?

> Sou novo  na lista. Espero poder  contribuir com ela sempre  com minha
> pequena experiência em programação  Perl. Porém, meus conhecimentos em
> perl são  bem resumidos,  isto é,  meus programas  têm um  formato bem
> "arroz com feijão", padrão das primeiras versões do perl.
>
    Há sempre espaço para qualquer tipo de contribuição.

    O importante é contribuir de alguma forma!

> Tenho uma  grande dúvida.  Estou querendo  desenvolver um  servidor de
> chat utilizando  conexões por sockets.  Existem esses dois  módulos do
> perl (IO::Socket::INET e IO::Select), aos quais na Net apenas achei os
> documentos padrões da perldoc para aprender. As sintaxes deles até não
> é o problema.  O que não consegui foi como  aplicá-los num servidor de
> chat e nos clientes. "O que uso onde?".
>
> Se  alguém souber  de alguma  documentação sobre  eles especificamente
> para geração de servidores chat, me avisem, ok?
>
    Se o  que você pretende fazer,  é criar um servidor  e cliente CHAT,
aconselho você dar uma olhada nas primitivas em C das seguintes funções:
socket, connect,  bind, listen, accept.  Elas se relacionam  da seguinte
forma, dependendo do protocolo utilizado:

# SOCKET INTERFACE

    - TCP

              Servidor

            +----------+
        +-- | socket() |  
        |   +----------+
        |
        +-> +--------+
            | bind() |
        +-- +--------+                  Cliente
        |
        +-> +----------+              +----------+
            | listen() |              | socket() | --+
        +-- +----------+              +----------+   |
        |                                            |
        +-> +----------+                             |
            | accept() |                             |
        +-- +----------+                             |
        |                                            |
        |                            +-----------+ <-+
        |  <------------------------ | connect() |
        |                            +-----------+ --+
        |                                            |
        +-> +--------+                 +---------+ <-+
            | read() | <-------------- | write() |
        +-- +--------+                 +---------+ --+
        |                                            |
        |   +---------+                 +--------+   |
        +-> | write() | --------------> | read() | <-+
            +---------+                 +--------+


    - UDP

             Servidor                   Cliente

            +----------+              +----------+
        +-- | socket() |              | socket() | --+
        |   +----------+              +----------+   |
        |                                            |
        +-> +--------+                  +--------+ <-+
            | bind() |                  | bind() |
        +-- +--------+                  +--------+ --+
        |                                            |
        +-> +------------+            +----------+ <-+
            | recvfrom() | <--------- | sendto() |
        +-- +------------+            +----------+ --+
        |                                            |
        |   +----------+            +------------+   |
        +-> | sendto() | ---------> | recvfrom() | <-+
            +----------+            +------------+


    O entendimento dessas primitivas, ajudará bastante na compreensão do
funcionamento da lib `IO::Socket::INET'.

    Boa sorte!!

> Obrigado, por hora.
>
    Disponha!

-- 
    Ednardo Lobo - www.elobo.cjb.net

--
taxidermist, n.:
	A man who mounts animals.



Mais detalhes sobre a lista de discussão Cascavel-pm