#!/opt/ActivePerl-5.12/bin/perl
use strict;
use warnings;
use Tkx;
Tkx::package_require('tile');
my $mw = Tkx::widget->new(".");
use IO::Socket;
my $server = IO::Socket::INET->new(
LocalPort => 7777,
Type => SOCK_STREAM,
Reuse => 1,
Listen => 3
);
my $log = $mw->new_tk__text(
-height => 10,
-width => 60,
-wrap => 'none'
);
$log->g_grid( -column => 0, -row => 0 );
Tkx::fconfigure($server, -blocking => 0);
Tkx::fileevent( $server, readable => [\&new_connection, \$server] );
Tkx::MainLoop();
sub new_connection {
my $listen = shift;
my $client = $listen->accept() or warn "Can't accept connection";
Tkx::fconfigure($client, -blocking => 0);
Tkx::fileevent( $client, readable =>[\&handle_connection, \$client] );
$log->insert( 'end', "connected\n" );
$log->see('end');
Tkx::update();
}
sub handle_connection {
my ($client) = shift;
my $message = <$client>;
if ( defined $message and $message !~ /^quit/ ) {
$message =~ s/[\r\n]+$//;
$log->insert( 'end', "$message\n" );
$log->see('end');
Tkx::update();
}
else {
print "connection closed\n";
$log->insert( 'end', "connection closed\n" );
$log->see('end');
Tkx::update();
$client->close();
}
}
####
It generates an error:
can not find channel named "IO::Socket::INET=GLOB(0xa119ed0)" at ./spshow_simple.pl line 24.
A client (not tested either because of failing server...)
####
#!/usr/bin/perl
use IO::Socket;
my $machine_addr = 'localhost';
$sock = new IO::Socket::INET(PeerAddr=>$machine_addr,
PeerPort=>7777,
Proto=>'tcp',
);
die "Could not connect: $!" unless $sock;
foreach my $count(1..100){
print $sock "$count\n";
print "$count\n";
}
close ($sock);