• [ 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
    ; 写得不太好,重写中。。
    
  • 相关阅读:
    Openstack API 开发 快速入门
    virtualBox虚拟机到vmware虚拟机转换
    使用Blogilo 发布博客到cnblogs
    Openstack Troubleshooting
    hdoj 1051 Wooden Sticks(上升子序列个数问题)
    sdut 2430 pillars (dp)
    hdoj 1058 Humble Numbers(dp)
    uva 10815 Andy's First Dictionary(快排、字符串)
    sdut 2317 Homogeneous squares
    hdoj 1025 Constructing Roads In JGShining's Kingdom(最长上升子序列+二分)
  • 原文地址:https://www.cnblogs.com/yeungchie/p/14423224.html
Copyright © 2020-2023  润新知