Wx::Socket(3pm) | User Contributed Perl Documentation | Wx::Socket(3pm) |
Wx::Socket - wxSocket* classes
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 ; }
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) ;
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 process 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.
Wx, The wxWxwindows documentation at <http://www.wxwindows.org/>
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.
2023-02-14 | perl v5.36.0 |