【问题标题】:use IO::Socket::IP ??? how to make a client in perl Ipv6使用 IO::Socket::IP ???如何在 perl ipv6 中创建客户端
【发布时间】:2013-06-04 00:52:15
【问题描述】:

我一直在尝试寻找一个简单的客户端 ipv6 脚本 这将适用于 Evens 服务器脚本,当然我 不知道我在做什么,所以我能做的就是重写某人 别人的工作,直到我知道我在做什么......

所以这是一个在 Microsoft widows 服务器上工作的服务器脚本

   use IO::Socket::IP -register; 
   my $sock = IO::Socket->new(
   Domain    => PF_INET6,
   LocalHost => "::1",
   Listen    => 1,
   ) or die "Cannot create socket - $@\n";

   print "Created a socket of type " . ref($sock) . "\n";

   {
   $in = <STDIN>;
   print $in->$sock;
   redo }

当然 $in->$sock 不起作用,因为我不知道如何发送 仅使用 $sock 的数据??? 所以我需要知道如何正确发送信息和
我需要的是一个客户端脚本来连接到上面的脚本 使用 ipv6 协议

有人可以帮忙吗??? 我希望能够从一个发送信息 使用这个 perl 程序到另一个 perl 程序 能够来回发送信息将 成为理想...

提前致谢 -马克

【问题讨论】:

    标签: perl client ipv6


    【解决方案1】:

    这是一个服务器套接字 (Listen =&gt; 1),所以你必须 accept 一个连接。

    use IO::Socket::IP -register;
    
    my $listen_sock = IO::Socket::IP->new(
       LocalHost => "::1",                    # bind()
       Listen    => 1,                        # listen()
    ) or die "Cannot create socket - $@\n";
    
    print("Listening to ".$listen_sock->sockhost()." "
                         .$listen_sock->sockport()."\n");
    
    while (1) {
       my $sock = $listen_sock->accept()
          or die $!;
    
       print("Connection received from ".$sock->peerhost()." "
                                        .$sock->peerport()."\n");
    
       while (<$sock>) {
          print $sock "echo: $_";
       }
    }
    

    一个客户:

    use IO::Socket::IP -register;
    
    @ARGV == 2 or die("usage");
    my ($host, $port) = @ARGV;
    
    my $sock = IO::Socket::IP->new(
       PeerHost => $host,                     # \ bind()
       PeerPort => $port,                     # /
    ) or die "Cannot create socket - $@\n";
    
    print $sock "Hello, world!\n";
    $sock->shutdown(1);                       # Done writing.
    print while <$sock>;
    

    cmets 指示用于执行操作的底层系统调用。

    【讨论】:

    • 将地址和端口作为参数传递。
    • 有没有办法再次使用相同的端口而不使用 $sock->shutdown(1);如果您发送大量信息,那么您会通过很多端口,最终会阻塞所有其他端口并关闭所有通信,因为您有一堆端口正在等待..有没有办法刷新相同的端口并再次使用它...
    • 当然。我只是让服务器一直运行到 EOF,但您不必这样做。
    • 阻塞与关机无关。如果要并行处理多个连接,则必须使用一些 for 多任务处理(例如线程)或 select 或非阻塞读取。这超出了你的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    • 2018-05-21
    • 1970-01-01
    相关资源
    最近更新 更多