server.pl

来自「一个简单的多线程的客户端,服务器端通信代码」· PL 代码 · 共 50 行

PL
50
字号
use strict;
use warnings;
use Errno qw(EAGAIN);
use threads; 
use threads::shared;
use IO::Socket::INET;

my $server_port    = $ARGV[0] || '3000';

my $server = IO::Socket::INET->new( LocalPort   => $server_port,
                                    Type        => SOCK_STREAM,
                                    Reuse       => 1,
                                    Listen      => 10)   
or die "Couldn't be a tcp server on port $server_port: $!\n";

while ( my $client = $server->accept()) {
    my $kidpid ;
    next if ($kidpid = fork) ;
 
    defined($kidpid) or die "cannot fork: $!";
    &threadSession($client);
    exit;
}

close(Server);

sub threadSession(){
    close Server;        
    my $sessionHandle = shift;
    select($sessionHandle);      
    $| = 1;         # auto-refresh
    
    #open(STDOUT, ">&\$sessionHandle") or die "can't dup client: $!";
    #open(STDERR, ">&\$sessionHandle") or die "can't dup client: $!";     
    print "done\n";      # to Client
    
    while (my $input= <$sessionHandle>){
        chomp $input;
        exit if ($input =~ m/^exitserver$/i);
        $input .= ' 2>&1';
        my $return = `$input`;
        print $return, "\n", "qq\n";
    }      
    
    #close Client;    
}



⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?