Wx::Socket.3pm

Langue: en

Autres versions - même langue

Version: 2004-02-28 (openSuse - 09/10/07)

Section: 3 (Bibliothèques de fonctions)

NAME

Wx::Socket - wxSocket* classes

USAGE


  use Wx qw(:socket) ;

  use Wx::Event qw(EVT_SOCKET_INPUT EVT_SOCKET_LOST) ;

  use Wx::Event qw(EVT_SOCKET_CONNECTION) ;




  ##########

  # CLIENT #

  ##########




  my $sock = Wx::SocketClient->new(wxSOCKET_WAITALL);




  EVT_SOCKET_INPUT($parent , $sock , \&onInput ) ;

  EVT_SOCKET_LOST($parent , $sock , \&onClose ) ;




  $sock->Connect('localhost',5050) ;




  if (! $sock->IsConnected ) { print "ERROR\n" ;}




  sub onInput {

    my ( $sock , $this , $evt ) = @_ ;

    my $length = 123;

    my $buffer ;

    $sock->Read($buffer , 1024 , $length ) ;

  }




  ##########

  # SERVER #

  ##########




  my $sock = Wx::SocketServer->new('localhost',5050,wxSOCKET_WAITALL);




  EVT_SOCKET_CONNECTION($parent , $sock , \&onConnect ) ;




  if ( !$sock->Ok ) { print "ERROR\n" ;}




  sub onConnect {

    my ( $sock , $this , $evt ) = @_ ;

    my $client = $sock->Accept(0) ;




    my ($local_host,$local_port) = $client->GetLocal ;

    my ($peer_host,$peer_port) = $client->GetPeer ;




    $client->Write("This is a data test!\n") ;



... or ...


    $client->Write( $data , length($data) ) ;




    $client->Close ;

  }



METHODS

All the methods work as in wxWidgets (see the documentation).

The functions for reading data (Read, ReadMsg, Peek) take 3 arguments, like the Perl read() function:


  ## To read the data into the variable

  $sock->Read($buffer , 1024) ;



... or ...


  ## To append data at the given offset:

  $sock->Read($buffer , 1024 , $offset ) ;



The write functions (Write, WriteMsg, Unread) can be used with 1 or 2 arguments:


  $client->Write("This is a data test!\n") ;




  $client->Write($data , $length) ;



EVENTS

The events are:

    EVT_SOCKET

    EVT_SOCKET_ALL

    EVT_SOCKET_INPUT

    EVT_SOCKET_OUTPUT

    EVT_SOCKET_CONNECTION

    EVT_SOCKET_LOST



The EVT_SOCKET works as in wxWidgets, the others are wxPerl extensions.

Note that EVT_SOCKET events of wxSocketClient and wxSocketServer work differently than other event types.

First you need to set the event handler:


    $sock->SetEventHandler($handler, $id) ;



Then you set what types of event you want to receive:


    ## this select all.

    $sock->SetNotify(wxSOCKET_INPUT_FLAG|wxSOCKET_OUTPUT_FLAG|

                     wxSOCKET_CONNECTION_FLAG|wxSOCKET_LOST_FLAG) ;



Enable the event notification:


    $sock->Notify(1) ;



And only after this use:


    ## note that $handler must be the same that was used in

    ## SetEventHandler

    EVT_SOCKET($handler, $id , sub{...} )



To make the events easier to use, all the proccess is automatic, and you just use:


    EVT_SOCKET_INPUT($handler , $socket , sub{...} )

    EVT_SOCKET_OUTPUT($handler , $socket , sub{...} )

    EVT_SOCKET_CONNECTION($handler , $socket , sub{...} )

    EVT_SOCKET_LOST($handler , $socket , sub{...} )




    ## This is for the events not used yet by the above:

    EVT_SOCKET_ALL($parent , $socket , sub{...} )



** The new way is better to handle more than one socket in the same time too.
   Take a look in the demos.

SEE ALSO

Wx, The wxWxwindows documentation at <http://www.wxwindows.org/>

AUTHOR

Graciliano M. P. <gm@virtuasites.com.br> This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.