加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl IO:Socket IO:Select server client

发布时间:2020-12-15 23:49:16 所属栏目:大数据 来源:网络整理
导读:server程序 接受客户端信息,并发送回应 #!/usr/bin/perl -w # socket_server.pl use strict; use IO::Socket; use IO::Select; # hash to install IP Port my ($ser_addr,$ser_port)=("127.0.0.1","12345"); our($buffer,$len); my $socket = IO::Socket::I
  1. server程序

接受客户端信息,并发送回应

#!/usr/bin/perl -w

# socket_server.pl

use strict;

use IO::Socket;

use IO::Select;


# hash to install IP Port


my ($ser_addr,$ser_port)=("127.0.0.1","12345");

our($buffer,$len);


my $socket = IO::Socket::INET->new(

? ? LocalAddr => "$ser_addr",?#本机IP地址

? ? LocalPort => "$ser_port",? #定义本机的Port,然后进行bind

? ? Type => SOCK_STREAM,?#套接字类型

? ? Proto => "tcp",#协议名

? ? Listen => 200,?#定义listen的最大数

? ? Blocking => 0,?#非阻塞

? ? ) or die "Can not create socket connect.$@";

my $sel = IO::Select->new($socket);

while (my @ready = $sel->can_read) {

? ? foreach my $fh (@ready) {

? ? ? ? if ($fh == $socket) {

? ? ? ? ? ? my $new = $socket->accept();

? ? ? ? ? ? $sel->add($new);

? ? ? ? }

? ? ? ? else {

? ? ? ? ? ? $len = $fh->recv($buffer,1024,0); #接收客户端消息

? ? ? ? ? ? print "$buffer n";

? ? ? ? ? ? $fh->send("Server OK!n",0); ?#发送服务端消息

? ? ? ? ? ? $fh->autoflush(1);

? ? ? ? ? ? $sel->remove($fh);

? ? ? ? ? ? $fh->close();

? ? ? ? }

? ? }

}

$socket->close() or warn "Close Socket failed.$@";


2.client?

连接客户端,发送一个消息,并接受服务器端应答消息


#!/usr/bin/perl -w

# Socket_client.pl

use strict;

use IO::Socket; ?##IO::Socket::INET模块是IO::Socket模块的子模块,不用重新use。

use IO::Select; ?##该模块和Linux下select()函数实现的功能一致,另扩展更过的功能。可以perldoc查看。


for (my $i=0; $i<20000; $i++){

&send_rev_data;


}


sub send_rev_data{

my ($ser_addr,$ser_port) = ("127.0.0.1","12345");

##IO::Socket::INET->new()用于初始化一个socket连接,其中集成了socket、inet_aton、connect、bind、listen等功能。就不需要单独转换IP地址为网络地址结构了,直接使用IP地址就ok了。

##具体参数下面单独介绍。

my $socket = IO::Socket::INET->new(

? ? PeerAddr => "$ser_addr",

? ? PeerPort => "$ser_port",

? ? Type => SOCK_STREAM,

? ? Proto => "tcp",

? ? ) or die "Can not create socket connect.$@";

$socket->send("Client Ok!n",0); ?##发送消息至服务器端。

$socket->autoflush(1); ?

my $sel = IO::Select->new($socket); ##建立select对象

while (my @ready = $sel->can_read) { ? ?##等待服务端返回的消息

? ? foreach my $fh (@ready) {

? ? ? ? if ($fh == $socket) {

? ? ? ? ? ? while (<$fh>) {

? ? ? ? ? ? ? ? print $_;

? ? ? ? ? ? }

? ? ? ? ? ? $sel->remove($fh); ?

? ? ? ? ? ? close $fh;

? ? ? ? }

? ? }

}

#$socket->close() or die "Close Socket failed.$@";

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读