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
連接配接用戶端,發送一個消息,并接受伺服器端應答消息
# Socket_client.pl
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了。
##具體參數下面單獨介紹。
PeerAddr => "$ser_addr",
PeerPort => "$ser_port",
Type => SOCK_STREAM,
Proto => "tcp",
$socket->send("Client Ok!\n",0); ##發送消息至伺服器端。
$socket->autoflush(1);
my $sel = IO::Select->new($socket); ##建立select對象
while (my @ready = $sel->can_read) { ##等待服務端傳回的消息
while (<$fh>) {
print $_;
}
$sel->remove($fh);
close $fh;
#$socket->close() or die "Close Socket failed.$@";
<a href="http://down.51cto.com/data/2365257" target="_blank">附件:http://down.51cto.com/data/2365257</a>
本文轉自 pgmia 51CTO部落格,原文連結:http://blog.51cto.com/heyiyi/1598532