I don't have Windows, so good luck trying this. It does work on an ArchLinux system, that is, if I correctly understand what you are trying to do.
#!/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; }
}