原文:http://www.lorui.com/perl-sockets-tcpip.html
套接字(Sockets)的简单介绍
套接字允许同一台机器或网络上的程序间进行通讯。它的工作方法很简单:网络上的每台机器通过地址来标识。本教程我们将讨论TCP/IP网络,所以本文所述的网络地址是指IP地址(比如192.168.1.83)。一台机器除了有IP地址外,它还有许多端口,用于同一时段进行多个连接。
一个程序希望从另一个程序那里接收连接,要求操作系统创建一个socket并将其绑定到某个商品。然后,这个程序通过监听这个scoket来接收发送过来的连接。其它程序也建立socket来和它进行通讯。访问者需要指定接收者的IP地址和端口号。如果一切顺利的话,我们马上可以看到,这两个程序使用它们的socket来建立网络通讯。这两个程序可能会交换信息,每个程序都会写入数据到它创建的socket并从该socket中读取数据。
我可以在Perl做这些吗?
当然。Perl支持socket的底层API。虽然使用API并不坏,但是还有一个非常方便的模块:IO::Socket。它将原始API进行封装,为socket提供更为简单、方便的方法。我们将在本教程中的使用IO::Socket,用来演示两个简单的程序通过socket来通讯。
接收方(Receiver)
首先,我们需要创建一个socket。我们将用它来接收连接。下面的代码演示了如何创建一个用于接收的socket。注意,我们需要指定本地机器名和端口来绑定socket。当然,如果这个端口已经被其它程序占用,将会创建失败。同时注意“Listen”参数:这是连接的最大数,通过socket队列来等等你接受并处理它们。我们暂且只接受一个连接(就是说,当一个连接在我们已经建立了其它连接的时候尝试与我们连接,我们将返回一个类似“连接被拒绝”的错误)。最后,那个“Reuse”选项告诉系统允许在这个程序退出后,重新使用该端口。它确保我们的程序在非正常退出或者非法关闭这个socket时,重新运行这个程序还能使用相同的商品来打开新的socket。
#!/usr/bin/perl
##############################################
# (c) 2011 LoRui(i@lorui.com, www.lorui.com) #
##############################################
use strict;
use warnings;
use IO::Socket;
my $socket = new IO::Socket::INET (
LocalHost => 'centos.local.lorui.com',
LocalPort => '7070',
Proto => 'tcp',
Listen => 1,
Reuse => 1,
) || die ("无法创建socket:$!\n");
my $new_socket = $socket->accept();
while(<$new_socket>) {
print $_;
}
close $new_socket;
现在,这个socket已经就绪,可以接收请求的连接了。我们使用 accept() 方法来等待一个连接。该方法返回一个新的socket,通过它我们可以和调用程序进行通讯。通过在这个socket上读取/写入可以实现完美的信息交换。这个socket可以像普通的文件句柄那样进行操作。
调用方(Caller)
通讯的另一端更加简单。我们要做的只是建立一个socket,在其中指定远程地址和端口。这样构造函数将在成功连接后返回一个socket对象,然后我们可以马上开始发送一些数据。发送数据的方法很简单:就像给其它文件句柄写入数据一样,我们只要把数据写入到socket即可。
#!/usr/bin/perl
##############################################
# (c) 2011 LoRui(i@lorui.com, www.lorui.com) #
##############################################
use strict;
use warnings;
use IO::Socket;
my $socket = new IO::Socket::INET (
PeerAddr => 'centos.local.lorui.com',
PeerPort => '7070',
Proto => 'tcp',
) || die ("无法创建socket:$!\n");
print $socket "Hello Perl Sockets, I'm LoRui!\n";
close $socket;
前进并尝试它!
你可以很容易地尝试上面的程序。你需要先运行接收程序再运行发送程序。接收完毕之后,你将在终端看到打印出的那行“Hello Perl Sockets, I'm LoRui!”。如果你在本机测试,可以使用“localhost”作为主机名。
同步
用这种方式进行通讯时,有一个需要考虑的重要问题:两端必须遵循事先商定的方式来进行数据交换。否则的话,很容易在其中一方尝试读取或双方都尝试写入时进入僵持状态。没有办法去猜测另一端是否完成了数据发送,除非它们之间有一些通讯协议,在已传送信息的内容里指定通讯的逻辑单元。在上面的例子中,模块非常简单:调用方发送一条信息然后关闭它这端的连接,接收方只需要在它完成之后读取这些数据。
通常客户端-服务端通讯由调用者(客户端)发送一个请求,接着接收者(服务端)作出回应。为了让服务端知道数据已发送完毕,信息的结尾必须有一些标记(比如两个空白行或一个“END REQUEST”行)。服务端只有在接收到这行的时候才开始作出回应,然后关闭这个socket连接。
分享到:
相关推荐
Perl Socket 编程 Socket又称”套接字”,应用程序通常通过”套接字”向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。 本章节我们为大家接收 Perl 语言中如何使用 Socket 服务。 创建...
"Learning Perl" 是Perl语言的经典入门教程,第五版更是经过了多年的实践与反馈优化,旨在为初学者提供清晰、全面的学习路径。 在Perl的世界里,学习者首先要了解其语法特性。Perl的语法受到了C语言的影响,但也有...
8. **网络编程**:Perl可以用来编写Web服务、客户端脚本,利用`socket`和`IO::Socket`模块进行TCP/IP通信。 9. **并发编程**:Perl支持线程(threads)和进程(forks)并发,允许编写并行执行的程序。 10. **脚本...
同时,也可能讨论Perl在网络编程中的应用,如Socket编程,用于实现客户端和服务端的通信。 最后,为了帮助读者更好地理解和实践,教程通常会包含丰富的示例代码和练习题。这些实例将覆盖各个主题,让读者有机会亲手...
### Perl语言入门(第五版)知识点总结 #### 一、Perl简介 - **定义与特点**:Perl(Practical Extraction and Reporting Language)是一种高级的、通用的编程语言,以其强大的文本处理能力而闻名。它支持多种编程...
这份"Perl入门培训资料"是为初学者准备的,旨在帮助你快速掌握Perl的基础知识和核心概念。下面将根据提供的文件名来解析和解释这些知识点: 1. **Perl简介.pptx** - 这部分内容会涵盖Perl语言的基本历史、特点以及...
Perl 语言快速入门教程 Perl 是 Practical Extraction and Report Language 的缩写,它是由 Larry Wall 设计的,主要用于 UNIX 环境下编程,当然目前它也是支持 Windows 系统的。本文主要是讲在 Windows 下的 Perl...
8. **网络编程**:Perl可以通过Socket模块进行网络编程,实现TCP/UDP通信,或者使用LWP库来发送HTTP请求。 9. **Web开发**:Perl有多种Web框架,如Dancer和Mojolicious,它们简化了Web应用程序的开发。 10. **生物...
- **Socket编程**:Perl可以创建套接字(socket)进行网络通信。 6. **Web开发**: - **CGI编程**:Perl的CGI(Common Gateway Interface)模块用于编写Web服务器的脚本。 - **模板系统**:如HTML::Template或TT...
根据给定文件的信息,我们可以推断出《Perl参考大全2》涵盖了从基本语法到数据库应用等多方面的内容。下面将详细展开这些知识点。...这使得本书成为学习Perl语言的全面指南,适合初学者入门以及进阶学习者深入研究。
"的描述可能意味着这些材料比经典的Perl入门书籍《Programming Perl》(俗称“小骆驼书”)更加深入或实用。 Perl的核心特性包括其灵活的语法、强大的文本处理能力以及对正则表达式的广泛支持。Perl的语法有时被...
本书通过循序渐进的教学方法,帮助读者快速入门并掌握Perl的核心概念和技术。 ### 核心知识点: #### 1. Perl语言基础 - **语法结构**:了解Perl的基本语法,包括变量、数据类型、运算符、控制结构(如if语句、...
网络编程方面,Perl提供了`socket`模块来创建套接字连接。 在24小时内入门Perl,你需要先熟悉基本语法,然后通过编写小脚本实践。逐渐接触更复杂的数据结构、模块使用和错误处理,最后可以尝试解决实际问题,比如...
10. **网络编程**:Perl可以用来编写网络客户端和服务端程序,如使用`socket`、`SOCKET`等套接字操作函数进行TCP/IP通信。 "Perl语言入门和提高-周晓方"这份资料很可能会涵盖这些内容,并可能包含更多关于Perl实战...
"Perl入门ゼミ公式サイト-构筑后"可能是一个针对初学者的Perl学习资源,旨在帮助用户掌握Perl的基础知识并进行实践。"构筑后"可能指的是课程或项目完成后的阶段,即学员已经具备一定的基础,准备进行更深入的学习或...
- **客户端**部署于需监控的主机上,监听特定Socket端口,接收来自服务器的命令,执行系统状态查询,并将结果返回至服务器。客户端的关键任务包括: - 系统状态采集:使用系统调用或读取/proc文件系统等方式获取...
发射器还提供其他编程语言版本: Java: : Python: : PHP: : Golang: : Perl: ://metacpan.org/pod/SocketIO :: 锈: : :bookmark_tabs: 表中的内容 :green_book: 建筑学 :person_running: 入门Gradle...
Python是一种高级编程语言,与Perl、C和Java等语言有相似之处,但也有其独特的语言特性。Python语法简洁明了,强调代码的可读性和易用性,适合初学者入门。在学习Python的过程中,理解并掌握其语法是至关重要的,...
4. 网络通信:支持socket网络套接字、SSL加密通信和异步网络通信等。 5. 网络协议:支持HTTP、FTP、SMTP、POP、IMAP、NNTP等网络协议。 6. W3C格式支持:包括HTML、SGML、XML处理。 7. 其他功能:提供国际化支持、...