server程序服務器
接受客戶端信息,併發送回應網絡
#!/usr/bin/perl -w併發
# socket_server.plsocket
use strict;tcp
use IO::Socket;ide
use IO::Select;函數
# hash to install IP Portserver
my ($ser_addr, $ser_port)=("127.0.0.1", "12345");對象
our($buffer, $len);ci
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.$@";
}