class IO::Socket::INET does IO::Socket {}

IO::Socket::INET 提供 TCP 套接字,包括服务器端和客户端。

有关 UDP 支持,请参阅 IO::Socket::Async

这是一个非常简单的“回显”服务器的示例,它侦听 localhost 上的端口 3333

my $listen = IO::Socket::INET.new:listen,
                                   :localhost<localhost>,
                                   :localport(3333) );
loop {
    my $conn = $listen.accept;
    try {
        while my $buf = $conn.recv(:bin{
            $conn.write: $buf;
        }
    }
    $conn.close;
 
    CATCH {
          default { .payload.say;      }
    }
 
}

以及连接到它的客户端,并打印出服务器的回答

my $conn = IO::Socket::INET.new:host<localhost>,
                                 :port(3333) );
$conn.print: 'Hello, Raku';
say $conn.recv;
$conn.close;

请记住,这是一个同步连接;任何节点在对方未读取的情况下尝试写入都会产生 无法从套接字接收数据:对等方重置连接 错误。

方法§

方法 new§

multi method new(
        :$host,
        :$port,
        :$family = PF_INET,
        :$encoding = 'utf-8',
        :$nl-in = "\r\n",
    --> IO::Socket::INET:D)
multi method new(
        :$localhost,
        :$localport,
        :$family = PF_INET,
        :$listen,
        :$encoding = 'utf-8',
        :$nl-in = "\r\n",
    --> IO::Socket::INET:D)

创建新套接字。

如果 :$listen 为 True,则创建一个新套接字,在端口 :$localport 上侦听 :$localhost(可以是 IP 地址或域名);换句话说,:$listen 标志决定了套接字的服务器模式。否则(即 :$listenFalse),新套接字会立即在端口 :$port 上打开与 :$host 的连接。

:$family 默认为 IPv4 的 PF_INET 常量,可以设置为 IPv6 的 PF_INET6 常量。

对于文本操作(例如 方法 lines方法 get),:$encoding 指定编码,:$nl-in 确定分隔行的字符。

方法§

方法 get§

method get()

从套接字读取一行并将其作为 Str 类型返回。在文件结尾 (EOF) 时返回 Nil

方法 lines§

method lines()

返回从套接字读取的行的一个惰性列表。

方法 accept§

method accept()

在侦听/服务器模式下,等待新的传入连接。一旦建立新连接,就会返回一个 IO::Socket::INET 实例(或子类实例)以使用该连接。