Perl 网络编程socket练习(一)

这篇博客介绍了Perl网络编程中的socket基础知识,通过一个简单的客户端和服务端通信示例,帮助学习者理解和掌握Perl进行socket通信的方法。

学习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
 

由于服务及客户端调试程序都在一台主机,所有看到两个established连接,仍然有一个监听状态的。
如果再一个窗口开一个客户端,从连接上看又多出一对established,但当前脚本无法支持多个连接的处理,所有后续客户端连接后无任何反应。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值