Perl IO:Socket IO:Select server client
接受客户端信息,并发送回应 #!/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.$@"; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |