does IO::Socket
IO::Socket::INET
提供 TCP 套接字,包括服务器端和客户端。
有关 UDP 支持,请参阅 IO::Socket::Async
。
这是一个非常简单的“回显”服务器的示例,它侦听 localhost
上的端口 3333
my = IO::Socket::INET.new( :listen,:localhost<localhost>,:localport(3333) );loop
以及连接到它的客户端,并打印出服务器的回答
my = IO::Socket::INET.new( :host<localhost>,:port(3333) );.print: 'Hello, Raku';say .recv;.close;
请记住,这是一个同步连接;任何节点在对方未读取的情况下尝试写入都会产生 无法从套接字接收数据:对等方重置连接
错误。
方法§
方法 new§
multi method new(:,:,: = PF_INET,: = 'utf-8',: = "\r\n",--> IO::Socket::INET)multi method new(:,:,: = PF_INET,:,: = 'utf-8',: = "\r\n",--> IO::Socket::INET)
创建新套接字。
如果 :$listen
为 True,则创建一个新套接字,在端口 :$localport
上侦听 :$localhost
(可以是 IP 地址或域名);换句话说,:$listen
标志决定了套接字的服务器模式。否则(即 :$listen
为 False
),新套接字会立即在端口 :$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
实例(或子类实例)以使用该连接。