perl socket初步
一直对网络编程怀着莫名的期待,从学习Perl编程之后,似乎我就是充着这个来的,以至于在一知半解之后,也想来沉淀沉淀。
网络编程涉及到很多的网络基础知识,我这个windows网管对这些自然也懂一些,但真正把它说清楚,怕是力不从心了。所以,这里就写点代码,以证明它确实是按照理论来进行的。这种理论就是一些基本知识。
在互联网上,为了实现通信,也就是主机上某个程序(进程)和另外某个进程(本地/远程)交换数据的过程。我们都知道IP地址作为唯一的标识某台主机之外,为了找到主机上的某个进程,我们就提到了“端口”。把IP和端口的组合进行“绑定”到特定的主机,这样我们就可以确定这台主机的身份。不管它向不向外面发送数据,这个被绑定的端口,一直监听着它,以求有连接时及时的响应。
这大概就是通信的过程中一些比较重要的描述。
在Perl中,我们使用Socket.pm模块来完成这个过程,或者简单的说,通过Socket我们能实现两台电脑之间的网络通信。而这个过程还不是很难。下面看一些拙劣代码,看这个过程是怎样建立的。当然如果没有和我一样的Perl基础的话,我相信这些代码对你而言,完全是瞎扯蛋。
- use Socket;
- use strict;
- use constant DEFAULT_ADDR=>'117.79.93.208'; #ubuntu.unix-center.net
- use constant PORT=>22;
- use constant IPPROTO_TCP=>6;
- my $address=shift||DEFAULT_ADDR;
- my $packed_addr=inet_aton($address);
- my $destination=sockaddr_in(PORT,$packed_addr);
- socket(SOCK,AF_INET,SOCK_STREAM,IPPROTO_TCP) or die "Can't make socket: $!";
- connect(SOCK,$destination) or die "Can't connect: $!";
- while(<SOCK>)
- {
- print "$_\n";
- }
- 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初步相关推荐
- Python Socket网络编程(一)初识Socket和Socket初步使用
目录 前言 网络编程 实质 IP地址和端口 数据传输协议 协议 Socket 概念 套接字 socket对象方法 初步使用 功能 源码 运行结果 结语 前言 本系列博客是笔者学习Python Sock ...
- PERL 使用IO::Socket::INET模块实现socket编程
In this article, let us discuss how to write Perl socket programming using the inbuilt socket module ...
- Python Socket网络编程(二)局域网内和局域网与广域网的持续通信
目录 前言 IP地址 简介 公有IP 私有IP 局域网之间网络通信 前提 功能描述 源码 运行结果 局域网与广域网网络通信 前提 源码 结语 前言 本系列博客是笔者学习Python Socket的过程 ...
- Perl教程_编程入门自学教程_菜鸟教程-免费教程分享
教程简介 Perl入门教程 - 从基本到高级概念的简单简单步骤了解Perl,包括简介,环境,语法,数据类型,变量,标量,数组,哈希,IF ... ELSE,循环,运算符,日期和时间,子程序,引用,格式 ...
- CentOS 7 安装 MySQL
环境 CentOS 7.1 (64-bit system) MySQL 5.6.24 CentOS 安装 参考:http://www.waylau.com/centos-7-installation- ...
- Mariadb dockerfile测试
[root@169_test mariadb10.3]# ll 总用量 8 -rw-r--r-- 1 root root 180 6月 6 10:25 Dockerfile -rw-r--r-- ...
- dockerfile中的run_Docker3-Dockerfile创建镜像的方法(推荐docker file这种方法)
一.镜像制作的方法 1.本地导入导出镜像 请参考:Docker 架构原理及简单使用 导出:docker save nginx >/tmp/nginx.tar.gz导入:docker load 2 ...
- (转) Linux(Centos7)yum安装最新mysql
原文:http://blog.csdn.net/gebitan505/article/details/54613549 环境 CentOS 7.1 (64-bit system) MySQL 5.6. ...
- ps_基础技术提升topic基础知识调研
基础技术提升topic基础知识调研结果 基础技术提升topic基础知识调研结果分类 大类 小类 调研提出的问题 C类 编译与调试 如何追core?对gdb的了解还是太浅,应用中有很多问题. 怎么在没有 ...
最新文章
- win7下安装配置tomcat,java运行环境
- 使用AndroidStudio创建自定义gradle插件并被引用实战例子
- 【超详细】一文学会链表解题(建议收藏!)
- php libxml 宝塔,宝塔编译安装各个版本php无法安装
- asp.net core 外部认证多站点模式实现
- Apache 工作模式配置优化
- angularjs html压缩,Angularjs 依赖压缩及自定义过滤器写法
- 随机森林回归 python_用随机森林回归预测“美版拼多多”商品销量
- 翻译: Swift 中的委托保留周期 如何在“纯”Swift(没有@objc)中进行弱协议引用
- 安卓系统分区 AB . 动态分区 .VAB到底是何物,分区不同怎么刷写第三方rec
- php仿抖音短视频小程序开发,微信小程序中实现类似抖音短视频切换效果
- 第二章 马尔可夫决策过程及表格型方法
- springboot实现支付宝扫码支付
- 批处理 bat cmd 命令大全
- 越权漏洞介绍和修复参考
- su:密码正确,但权限被拒绝
- 读懂2014年全球互联网广告新生态
- 【Python爬虫】 爬取京东商品图片并下载
- Win32病毒入门(一)
- 蘑菇街2021财年Q3财报出炉:首次实现单季度盈利
热门文章
- php mysql设计中验证码的实现_利用PHP绘图函数实现简单验证码功能
- 10 -3 2用c语言怎么打,(3*20+30-10)/2怎么使用C语言编写
- redux解决了什么问题?
- matlab计算系统过渡过程时间,MATLAB在电机拖动拖动系统过渡过程分析中的应用
- 加拿大28历史开奖鸿蒙,本内特入选加拿大男篮集训名单,史上最水状元秀如今在何处?...
- JavaScript十六进制、八进制、二进制与十进制互转
- vscode怎么连接mysql_如何在VSCode连接使用MySQL数据库?
- html非封闭标签,自封闭的html标签
- 20190803:栈实践(最小栈)
- TDX抢反弹指标(不含未來函数)