zoukankan      html  css  js  c++  java
  • [ Perl ] Perl 创建 Socket 实现与 Skill 的通信

    https://www.cnblogs.com/yeungchie/

    Perl

    服务端

    • ycSocketServer.pl
    #!/bin/env perl
    #-----------------------------------
    #  Program   :  ycSocketServer.pl  *
    #  Language  :  Perl               *
    #  Author    :  YEUNGCHIE          *
    #  Version   :  2021.02.27         *
    #-----------------------------------
    use v5.10;
    use warnings;
    use strict;
    use Getopt::Long;
    use IO::Socket;
    
    GetOptions (
        'm|mode:s' => my $mode, # UNIX or INET
        'f|file:s' => my $file,
        'h|host:s' => my $host,
        'p|port:s' => my $port,
        #
    );
    $mode = "UNIX"                  unless defined $mode;
    $file = "$ENV{PWD}/.stream.skt" unless defined $file;
    $host = "127.0.0.1"             unless defined $host;
    $port = "99797"                 unless defined $port;
    
    &server;
    
    sub server {
        my $socket;
        given($mode){
            when("UNIX"){
                unlink $file if ( -S $file );
                $socket = IO::Socket::UNIX->new(
                    Type   => SOCK_STREAM(),
                    Local  => $file,
                    Listen => 1,
                    Reuse  => 1,
                );
            }
            when("INET"){
                $socket = IO::Socket::INET->new(
                    LocalHost => $host,
                    LocalPort => $port,
                    Proto     => "tcp",
                    Listen    => 1,
                    Reuse     => 1,
                );
            }
        }# given
        die "Could not create socket: $!
    " unless $socket;
        
        #
        my $data = $socket->accept();
        while( <$data> ){ print; }
        close $socket;
        unlink $file if $mode eq "UNIX";
    }# server
    

    客户端

    • ycServerClient.pl
    #!/bin/env perl
    #-----------------------------------
    #  Program   :  ycSocketClient.pl  *
    #  Language  :  Perl               *
    #  Author    :  YEUNGCHIE          *
    #  Version   :  2021.02.27         *
    #-----------------------------------
    use v5.10;
    use warnings;
    use strict;
    use Getopt::Long;
    use IO::Socket;
    
    GetOptions (
        'm|mode:s'       => my $mode, # UNIX or INET
        'f|file:s'       => my $file,
        'h|host:s'       => my $host,
        'p|port:s'       => my $port,
        'i|input|data:s' => my $data,
    );
    $mode = "UNIX"                  unless defined $mode;
    $file = "$ENV{PWD}/.stream.skt" unless defined $file;
    $host = "127.0.0.1"             unless defined $host;
    $port = "99797"                 unless defined $port;
    
    &client;
    
    sub client {
        my $socket;
        given($mode){
            when("UNIX"){
                #
                $socket = IO::Socket::UNIX->new(
                    Type => SOCK_STREAM(),
                    Peer => $file,
                    #
                    #
                );
            }
            when("INET"){
                $socket = IO::Socket::INET->new(
                    PeerHost => $host,
                    PeerPort => $port,
                    Proto    => "tcp",
                    #
                    #
                );
            }
        }# given
        die "Could not create socket: $!
    " unless $socket;
        
        $data = shift @ARGV || <STDIN> unless defined $data;
        chomp $data;
        $data = "nil" if $data eq "";
        print $socket "$data";
        close $socket;
    }# client
    

    Skill

    调用 Socket

    • ycStartSocket.il
    ; 写得不太好,重写中。。
    
  • 相关阅读:
    14款经典的MySQL客户端软件
    淘宝、百度软件工程师们小调皮,各种霸气外漏
    使用Navicat for Oracle工具连接oracle出错:ORA-12737
    解析xlsx与xls--使用2012poi.jar
    LUOGU P4163 [SCOI2007]排列
    LUOGU P1337 [JSOI2004]平衡点 / 吊打XXX(模拟退火)
    LUOGU P1438 无聊的数列 (差分+线段树)
    LUOGU P1967 货车运输(最大生成树+树剖+线段树)
    LUOGU P3382 【模板】三分法 (三分)
    LUOGU P4027 [NOI2007]货币兑换 (斜率优化+CDQ分治)
  • 原文地址:https://www.cnblogs.com/yeungchie/p/14423224.html
Copyright © 2011-2022 走看看