Wx::Socket(3pm)
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>
COPYRIGHT
- This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.