Perl6 中的SOCKET就是相当于Perl5 的 IO::Socket::INET。

官方介绍如下:

#下面是客户端
multi method new(
:$host,
:$port,
:$family = ,
:$encoding = 'utf-8',
:$nl-in = "\r\n",
--> IO::Socket::INET:D) #下面是服务端
multi method new(
:$localhost,
:$localport,
:$family = ,
:$listen,
:$encoding = 'utf-8',
:$nl-in = "\r\n",
--> IO::Socket::INET:D)

我们使用时, 设置我们要用的就行, 对于其他参数, 让其默认即可。

服务端:

my $listen = IO::Socket::INET.new(:listen, :localhost<localhost>, :localport());

客户端:

my $conn = IO::Socket::INET.new(:host<localhost>, :port());

完整服务端例子:
my $s = IO::Socket::INET.new(:listen, :localhost<localhost>, :localport());
loop {
my $c = $s.accept;
while (my $buf = $c.read( )) {
say $buf.WHAT;
say $buf.decode('utf-8');}
$c.close;
}

完整客户端例子:

my $c = IO::Socket::INET.new(:host<localhost>, :port());
#my $data = prompt 'Str:';
my $data = slurp 'data.txt';
$c.print: $data;
#my $buff = $c.recv(:bin);
#say $buff;
#say $c.^methods;
$c.close;
#say $data;

这里说明几个参数。

If :$listen is True, creates a new socket that listen on $localhost (which can be an IP address or a domain name) on port $localport. Otherwise it opens a connection to $host on port $port.
如果listen设置了, 就相当于创建了一个服务端, 并且在端口localport监听。服务地址用localhost指定, 可以是域名或IP地址。
如果是客户端, 只设置host与port就行 $family defaults to for IPv4, and can be set to for IPv6.
如果是IP4, 默认family为2, 如果是IP6, 默认为3, 一般不要自行设置, 默认就行。 For text operations (such as method lines and method get), $encoding specifies the encoding, and $nl-in determines the character(s) that separate lines.
method get()

从SOCKET中获取一行, 返回的是Str 字符串类型。

method lines()

从SOCKET中获取多行返回一个列表。

上面的GET()/LINES()都跟文件中读取类似。

method accept()

用于服务器端,监听并受来到的连接, 并返回一个SOCKET。

SOCKET创建好后, 一般来说就是接收与发送数据了, 官方文档里的几个函数如下:

接收数据函数如下:

method recv(IO::Socket:D: Cool $elems = Inf, :$bin)

接收数据函数, 用法如下:

$connect.recv()

$connect.recv()

$connect.recv(:bin)

数字类型的参说, 说明只接收最多的字节数, 最后面的 :bin 参数,  是设置接收数据后的返回格式 用的。

如果 $connect.recv(:bin)设置了, 说明返回的是 Blob 数据块, 如果不设置, 就返回正常的字符串类型。

method read(IO::Socket:D: Int(Cool) $bytes)

从SOCKET中读取数据, 返回 Blob 格式。 可以设置读取的字节数, 或一次过全部读取 (如果数据超过一定长度, 用一次过读取的方法会出错 ($connect.read()), 这时改为 $connect.read(1024)这种方式读取比较好, 再用 while判断是否读取完毕), 如下所示:

while (my $buf = $c.read( )) {
say $buf;
}

下面是发送数据的函数:

method print(IO::Socket:D: Str(Cool) $string)

参数为  Str 字符串类型。

用法:

$socket.print: $data
$socket.print($data)

跟文件写入类似。

method write(IO::Socket:D: Blob:D $buf)

参数为 Blob 类型。

用法跟 print 类似, 只是参数不同。

method put(IO::Socket:D: Str(Cool) $string)

跟 前两个类似, 参数为 Str 字符串类型。

最后说说 Blob, Perl6官方文档如下:

https://docs.perl6.org/type/Blob

如果你的 Socket 接收到  Blob 后, 想转化为字符串型式, 可以用如下方法:

$data.decode('utf-8')

Socket用完了, 最后就是关闭了:

method close(IO::Socket:D)

用法如下:

$socket.close;
close($socket);

perl6 Socket的更多相关文章

  1. perl6 Socket: 发送HTTP请求

    sub MAIN(Str $host,Str $path, Int $port) { my $send = "GET $path HTTP/1.1\r\nHost: $host\r\n\r\ ...

  2. socket读写返回值的处理

    在调用socket读写函数read(),write()时,都会有返回值.如果没有正确处理返回值,就可能引入一些问题 总结了以下几点 1当read()或者write()函数返回值大于0时,表示实际从缓冲 ...

  3. Socket聊天程序——Common

    写在前面: 上一篇记录了Socket聊天程序的客户端设计,为了记录的完整性,这里还是将Socket聊天的最后一个模块--Common模块记录一下.Common的设计如下: 功能说明: Common模块 ...

  4. Socket聊天程序——客户端

    写在前面: 上周末抽点时间把自己写的一个简单Socket聊天程序的初始设计和服务端细化设计记录了一下,周二终于等来毕业前考的软考证书,然后接下来就是在加班的日子度过了,今天正好周五,打算把客户端的详细 ...

  5. Socket聊天程序——服务端

    写在前面: 昨天在博客记录自己抽空写的一个Socket聊天程序的初始设计,那是这个程序的整体设计,为了完整性,今天把服务端的设计细化记录一下,首页贴出Socket聊天程序的服务端大体设计图,如下图: ...

  6. Socket聊天程序——初始设计

    写在前面: 可能是临近期末了,各种课程设计接踵而来,最近在csdn上看到2个一样问答(问题A,问题B),那就是编写一个基于socket的聊天程序,正好最近刚用socket做了一些事,出于兴趣,自己抽了 ...

  7. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  8. Android Socket连接PC出错问题及解决

    最近测试问题:Android 通过Socket链接电脑,ip和端口都是正确的,也在同一网段,可android端就是报异常如下: 解决办法:测试电脑的防火墙可能开着,在控制面板把防火墙打开即可.

  9. Linux下的C Socket编程 -- server端的继续研究

    Linux下的C Socket编程(四) 延长server的生命周期 在前面的一个个例子中,server在处理完一个连接后便会立即结束掉自己,然而这种server并不科学啊,server应该是能够一直 ...

随机推荐

  1. css & text-overflow & ellipsis

    css & text-overflow & ellipsis https://developer.mozilla.org/en-US/docs/Web/CSS/text-overflo ...

  2. ping不通的常见原因和解决办法

    Ping是Windows.Unix和Linux系统下的一个命令.ping也属于一个通信协议,是TCP/IP协议的一部分.利用“ping”命令可以检查网络是否连通.如果ping不通则可以通过以下方式寻找 ...

  3. adb使用过程常见的几种错误总结

    问题1:Failure [INSTALL_FAILED_ALREADY_EXISTS] 问题原因:该程序已存在. 解决方法:增加-r参数,即可成功覆盖安装 问题2:Failure [INSTALL_F ...

  4. 第209天:jQuery运动框架封装(二)

    运动框架 一.函数------单物体运动框架封装 1.基于时间的运动原理 动画时间进程 动画距离进程 图解: 物体从0移动到400 当物体移动到200的时候 走了50% 同样的,物体总共运行需要4秒 ...

  5. wpf下使用NotifyIcon

    以前在winForm下使用过NotifyIcon,到wpf找不到了,在wpf下还是直接用WinForm里的那个NotifyIcon实现最小到系统托盘 定义一个NotifyIcon成员 : Notify ...

  6. [CQOI2011]动态逆序对 CDQ分治

    洛谷上有2道相同的题目(基本是完全相同的,输入输出格式略有不同) ---题面--- ---题面--- CDQ分治 首先由于删除是很不好处理的,所以我们把删除改为插入,然后输出的时候倒着输出即可 首先这 ...

  7. Linux学习笔记二:tar命令使用

    tar命令详解 tar命令详解 -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的 ...

  8. BZOJ3530:[SDOI2014]数数——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3530 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子 ...

  9. [CEOI2004]锯木厂选址

    link 试题分析 做这种题就应该去先写个暴力代码 #include<iostream> #include<cstring> #include<cstdio> #i ...

  10. NYOJ--520

    最大素因子 原题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=520 分析:先筛素数,同时记录下素数的序号,然后质因数分解. #include ...