学习Perl网络编程,首先学习有关socket通信基础。留存笔记,并供爱好者参考:
测试一个最简单的客户、服务端通信。
客户端发送消息,服务端接收后原样返回给客户端。
###server 服务端程序
use IO::Socket;
my $server = IO::Socket::INET->new(LocalPort => '65432',
Listen => 2,
Resue => 1)
or die “cannot listen on port : $@”;
while ( my $client = $server->accept() )
{
while ( <$client> ) #从句柄接收
{
print “client : $_”;
print $client “hello $_”; #向句柄输出
}
}
###client 客户端程序
use IO::Socket;
my $sock = IO::Socket::INET->new(PeerAddr => 'localhost',
PeerPort => '65432',
Proto => 'tcp')
or die “cannot connet: $@”;
while( <STDIN>)
{
print $sock $_;
my $msg = <$sock>;
print “server : $_”;
}说明:
1.服务端和客户端初始化都通过new方法创建socket句柄,关键区别在于服务端指定listen参数及端口,
客户端则指定服务端地址和端口(最小需求);
2.服务端的accept方法用于捕获连接上的监听,并把这个客户端连接赋值给$client,随后客户端与server之间的通信就通过$client句柄来实现,不再与初始创建的socket $server有关连,而$server则保持继续监听状态;
3.服务/客户端操作连接句柄$client就像操作文件句柄一样,print输出到句柄或<$client>从句柄得到接收;
运行过程:
1.首先启动服务端,这时候查看后台端口状态
tcp 0 0 0.0.0.0:65432 0.0.0.0:* LISTEN
当前在端口65432上有一个监听,接着启动一个客户端,客户端可以发送消息,在服务端窗口会看到消息,同时客户端又回显服务端返回的消息。查看监听
tcp 0 0 0.0.0.0:65432 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:35534 127.0.0.1:65432 ESTABLISHED
tcp 0 0 127.0.0.1:65432 127.0.0.1:35534 ESTABLISHED
tcp 0 0 127.0.0.1:35534 127.0.0.1:65432 ESTABLISHED
tcp 0 0 127.0.0.1:65432 127.0.0.1:35534 ESTABLISHED
由于服务及客户端调试程序都在一台主机,所有看到两个established连接,仍然有一个监听状态的。
如果再一个窗口开一个客户端,从连接上看又多出一对established,但当前脚本无法支持多个连接的处理,所有后续客户端连接后无任何反应。
这篇博客介绍了Perl网络编程中的socket基础知识,通过一个简单的客户端和服务端通信示例,帮助学习者理解和掌握Perl进行socket通信的方法。
704

被折叠的 条评论
为什么被折叠?



