珀尔 |套接字编程
Perl 中的套接字编程是一种连接网络上的两个节点以相互通信的方式。基本上,它是一种单向的客户端和服务器设置,客户端连接,向服务器发送消息,服务器使用套接字连接显示它们。一个套接字(节点)侦听 IP 上的特定端口,而另一个套接字伸手到另一个以形成连接。服务器形成侦听器套接字,而客户端伸手到服务器。在深入了解服务器和客户端代码之前,强烈建议先了解 TCP/IP 模型。
网络上的任何计算机系统都需要一个本地端口来通过 Internet 传输数据。该数据使用其 IP 地址定向到指定系统。每个系统都通过为相应进程指定的端口通过网络接收和发送这些数据。例如,端口 80 是接收服务器发送的信息的默认端口。该端口不必总是相同,也可以由用户决定。
因此,套接字是一个 IP 地址和一个端口,它使网络连接能够向其他网络或系统发送/接收信息。
通过运行 Perl 脚本在两个不同的控制台上创建服务器和客户端,然后通过安全连接在两者之间传输数据,可以更好地理解套接字编程。
上图说明了在 Socket 编程中运行服务器端和客户端脚本所必须的调用。
服务器端编程的阶段
要在套接字编程中创建服务器,分步执行以下阶段:
->使用socket()
调用函数创建一个套接字。 Perl 提供了一个预定义的模块Socket.pm
,它需要使用 ' use ' pragma 包含在代码中。
use Socket;
该模块将帮助在服务器端创建一个套接字
-> bind()
调用用于将套接字与端口号绑定。没有端口,套接字将毫无用处。服务器使用此bind()
函数将端口分配给套接字。
bind(socket, port_address)
-> listen()
调用是使端口能够等待任何传入的请求。此调用由服务器完成,以提供服务器允许的连接请求的限制。
listen(socket, size)
在这里,size 用于传递请求限制。
-> accept()
调用用于向access()
函数发出请求以接受传入的连接。
accept(new_socket, socket)
如果access()
调用成功,则返回一个新的套接字以供将来与相应客户端的连接。
客户端编程阶段
要在套接字编程中创建客户端,分步执行以下阶段:
->使用socket()
调用函数创建一个套接字。 Perl 提供了一个预定义的模块Socket.pm
,它需要使用 ' use ' pragma 包含在代码中。
use Socket;
该模块将帮助在客户端创建一个套接字
-> connect()
调用用于通过使用特定地址将套接字与服务器连接。
connect(socket, address)
这里,address 与bind()
调用中的类似,只是它包含远程服务器的 IP 地址。
套接字编程示例:
为创建服务器而运行的脚本:
#!/usr/bin/perl -w
use IO::Socket;
use strict;
use warnings;
my $socket = new IO::Socket::INET (
LocalHost => 'localhost',
LocalPort => '6666',
Proto => 'tcp',
Listen => 1,
Reuse => 1,
);
die "Could not create socket: $!n" unless $socket;
print "Waiting for data from the client end\n";
my $new_socket = $socket->accept();
while(<$new_socket>)
{
print $_;
}
close($socket);
将上述脚本另存为server_side.pl
输出:
为创建客户端运行的脚本:
use strict;
use warnings;
use IO::Socket;
my $socket = new IO::Socket::INET (
PeerAddr => 'localhost',
PeerPort => '6666',
Proto => 'tcp',
);
die "Could not create socket: $!n" unless $socket;
print "Enter data to send:\n";
my $data = ;
chomp $data;
print $socket "Data received from user: '$data'\n";
close($socket);
将上述脚本另存为Client_side.pl
输出:
提供输入以测试套接字编程:
客户端:
服务器端: