一直对网络编程怀着莫名的期待,从学习Perl编程之后,似乎我就是充着这个来的,以至于在一知半解之后,也想来沉淀沉淀。

网络编程涉及到很多的网络基础知识,我这个windows网管对这些自然也懂一些,但真正把它说清楚,怕是力不从心了。所以,这里就写点代码,以证明它确实是按照理论来进行的。这种理论就是一些基本知识。

在互联网上,为了实现通信,也就是主机上某个程序(进程)和另外某个进程(本地/远程)交换数据的过程。我们都知道IP地址作为唯一的标识某台主机之外,为了找到主机上的某个进程,我们就提到了“端口”。把IP和端口的组合进行“绑定”到特定的主机,这样我们就可以确定这台主机的身份。不管它向不向外面发送数据,这个被绑定的端口,一直监听着它,以求有连接时及时的响应。

这大概就是通信的过程中一些比较重要的描述。

在Perl中,我们使用Socket.pm模块来完成这个过程,或者简单的说,通过Socket我们能实现两台电脑之间的网络通信。而这个过程还不是很难。下面看一些拙劣代码,看这个过程是怎样建立的。当然如果没有和我一样的Perl基础的话,我相信这些代码对你而言,完全是瞎扯蛋。

  1. use Socket;
  2. use strict;
  3. use constant DEFAULT_ADDR=>'117.79.93.208'; #ubuntu.unix-center.net
  4. use constant PORT=>22;
  5. use constant IPPROTO_TCP=>6;
  6. my $address=shift||DEFAULT_ADDR;
  7. my $packed_addr=inet_aton($address);
  8. my $destination=sockaddr_in(PORT,$packed_addr);
  9. socket(SOCK,AF_INET,SOCK_STREAM,IPPROTO_TCP) or die "Can't make socket: $!";
  10. connect(SOCK,$destination) or die "Can't connect: $!";
  11. while(<SOCK>)
  12. {
  13. print "$_\n";
  14. }
  15. exit 1;

这代码完全是copy了《Perl网络编程》中的例子,如果不想看“二手代码”,请直接前往。

作为一个Perl新手,总希望别人的代码中多点注释,我也如此。

# use constant 相当于声明一个宏变量,在Perl中这叫编译指示

# inet_aton 把IP地址“压缩”成二进制的形式,我是这么认为的。相对应于inet_ntoa

# sockaddr_in 把IP和端口进行组合,形成一个标识

当我们使用socket函数创建一个套接之后,我们就可以像对待文件句柄一样对待它。我们可以使用read、sysread等函数从远程读取数据。这似乎就是进程间通信了。

作为Perl Socket初步,只能说这么多了。就这么一个小小的例子,其中的知识点挺多,这就是麻雀虽小...

转载于:https://blog.51cto.com/httpcn/537556

perl socket初步相关推荐

  1. Python Socket网络编程(一)初识Socket和Socket初步使用

    目录 前言 网络编程 实质 IP地址和端口 数据传输协议 协议 Socket 概念 套接字 socket对象方法 初步使用 功能 源码 运行结果 结语 前言 本系列博客是笔者学习Python Sock ...

  2. PERL 使用IO::Socket::INET模块实现socket编程

    In this article, let us discuss how to write Perl socket programming using the inbuilt socket module ...

  3. Python Socket网络编程(二)局域网内和局域网与广域网的持续通信

    目录 前言 IP地址 简介 公有IP 私有IP 局域网之间网络通信 前提 功能描述 源码 运行结果 局域网与广域网网络通信 前提 源码 结语 前言 本系列博客是笔者学习Python Socket的过程 ...

  4. Perl教程_编程入门自学教程_菜鸟教程-免费教程分享

    教程简介 Perl入门教程 - 从基本到高级概念的简单简单步骤了解Perl,包括简介,环境,语法,数据类型,变量,标量,数组,哈希,IF ... ELSE,循环,运算符,日期和时间,子程序,引用,格式 ...

  5. CentOS 7 安装 MySQL

    环境 CentOS 7.1 (64-bit system) MySQL 5.6.24 CentOS 安装 参考:http://www.waylau.com/centos-7-installation- ...

  6. Mariadb dockerfile测试

    [root@169_test mariadb10.3]# ll 总用量 8 -rw-r--r-- 1 root root 180 6月   6 10:25 Dockerfile -rw-r--r-- ...

  7. dockerfile中的run_Docker3-Dockerfile创建镜像的方法(推荐docker file这种方法)

    一.镜像制作的方法 1.本地导入导出镜像 请参考:Docker 架构原理及简单使用 导出:docker save nginx >/tmp/nginx.tar.gz导入:docker load 2 ...

  8. (转) Linux(Centos7)yum安装最新mysql

    原文:http://blog.csdn.net/gebitan505/article/details/54613549 环境 CentOS 7.1 (64-bit system) MySQL 5.6. ...

  9. ps_基础技术提升topic基础知识调研

    基础技术提升topic基础知识调研结果 基础技术提升topic基础知识调研结果分类 大类 小类 调研提出的问题 C类 编译与调试 如何追core?对gdb的了解还是太浅,应用中有很多问题. 怎么在没有 ...

最新文章

  1. win7下安装配置tomcat,java运行环境
  2. 使用AndroidStudio创建自定义gradle插件并被引用实战例子
  3. 【超详细】一文学会链表解题(建议收藏!)
  4. php libxml 宝塔,宝塔编译安装各个版本php无法安装
  5. asp.net core 外部认证多站点模式实现
  6. Apache 工作模式配置优化
  7. angularjs html压缩,Angularjs 依赖压缩及自定义过滤器写法
  8. 随机森林回归 python_用随机森林回归预测“美版拼多多”商品销量
  9. 翻译: Swift 中的委托保留周期 如何在“纯”Swift(没有@objc)中进行弱协议引用
  10. 安卓系统分区 AB . 动态分区 .VAB到底是何物,分区不同怎么刷写第三方rec
  11. php仿抖音短视频小程序开发,微信小程序中实现类似抖音短视频切换效果
  12. 第二章 马尔可夫决策过程及表格型方法
  13. springboot实现支付宝扫码支付
  14. 批处理 bat cmd 命令大全
  15. 越权漏洞介绍和修复参考
  16. su:密码正确,但权限被拒绝
  17. 读懂2014年全球互联网广告新生态
  18. 【Python爬虫】 爬取京东商品图片并下载
  19. Win32病毒入门(一)
  20. 蘑菇街2021财年Q3财报出炉:首次实现单季度盈利

热门文章

  1. php mysql设计中验证码的实现_利用PHP绘图函数实现简单验证码功能
  2. 10 -3 2用c语言怎么打,(3*20+30-10)/2怎么使用C语言编写
  3. redux解决了什么问题?
  4. matlab计算系统过渡过程时间,MATLAB在电机拖动拖动系统过渡过程分析中的应用
  5. 加拿大28历史开奖鸿蒙,本内特入选加拿大男篮集训名单,史上最水状元秀如今在何处?...
  6. JavaScript十六进制、八进制、二进制与十进制互转
  7. vscode怎么连接mysql_如何在VSCode连接使用MySQL数据库?
  8. html非封闭标签,自封闭的html标签
  9. 20190803:栈实践(最小栈)
  10. TDX抢反弹指标(不含未來函数)