#!/usr/bin/perl use strict; # https://perlmonks.org/?node_id=11125685 use warnings; use Tk; use IO::Socket; my $listen = new IO::Socket::INET ( LocalHost => '127.0.0.1', LocalPort => '23456', Proto => 'tcp', Listen => 5, Reuse => 1 ) or die "cannot create listen socket $@\n"; warn "server waiting for client connection on port 23456 \n"; my $val = 0; my $client; my $mw = MainWindow->new(); my $label = $mw->Label( -width => 50, -textvariable => \$val,)->pack(); my $button; $button = $mw->Button( -text => 'Stop input', -command => sub { $button->configure(-state=>'disabled'); close $client; close $listen; }, )->pack(); $mw->fileevent( $listen, 'readable', \&newcon ); MainLoop; sub newcon { $client = $listen->accept; $mw->fileevent($client, 'readable', \&getdata ); } sub getdata { if( sysread $client, my $buf, 1024 ) { warn "received data: $buf\n"; $val = $buf =~ tr/\n//dr; $client->send('ok'); # write response data to the connected client shutdown($client, 1); # notify client that response has been sent } else { close $client; } }