Perl socket client and server

TCP:
server端:

#!/usr/bin/perl -w
use Socket;
use IO::Handle;
socket(SOCK,AF_INET,SOCK_STREAM,getprotobyname("tcp"));
#setsockopt(SOCK,SOL_SOCKET,SO_REUSEADDR,1);
my $addr=sockaddr_in(3000,INADDR_ANY);
bind(SOCK,$addr);

listen(SOCK,SOMAXCONN);

while(1){
next unless my $addr1=accept(S,SOCK);

S->autoflush(1);
#       STDOUT->autoflush(1);
print S "welcome/n";
while(<S>){
print $_;
chomp;
if($_=~/^quit/i){
print S "bye";
close S;
close SOCK;
exit 0;
}
print S (`$_`)."/n";
}

close S;
}
client端:

#!/usr/bin/perl -w
use Socket;
use IO::Handle;
socket(SOCK,getprotobyname("tcp"));

my $addr=sockaddr_in(3000,inet_aton("192.168.1.73"));
connect(SOCK,$addr);
SOCK->autoflush(1);
$buff=<SOCK>;
STDOUT->autoflush(1);
print $buff;
while(1)
{
$in=<STDIN>;
send(SOCK,$in,0);
while(my $l=sysread(SOCK,$buff,100))
{
if($buff=~/bye/i){
close SOCK;
exit 0;
}
print $buff;
last if $l<100;
}

}
UDP:#udp server#!use/bin/perl -wuse Socket; #导入Socket库$localhost=sockaddr_in(4000,INADDR_ANY);#压入sockaddr_in模式,利用了全局当地压缩地点INADDR_ANY保存字socket(SERVER,SOCK_DGRAM,17); #成立UDP套接字bind(SERVER,$localhost); #绑定套接字while(1){ #进入办事器轮回体next unless $client=recv(SERVER,100,0); #若是领受到数据就把数据压入$buff,保存长途地点在$clientchop($buff); #减去$buff末了的输入标记print "$buff/n"; #在$buff变量打入STDOUTsend(SERVER,"$buff/n",$client); #把$buff发送给客户端}close SERVER; #封闭套接字exit 1; #退出法式 #udp client #!use/bin/perl -w use Socket; #导入Socket库 $host=$ARGV[0]; #第一参数为主机变量 $port=$ARGV[1]; #第二参数为端口变量 $packhost=inet_aton($host); #压缩主机地点 $address=sockaddr_in($port,$packhost); #压为sockaddr_in模式 socket(CLIENT,17); #成立UDP套接字 send(CLIENT,"hi,body!/n",$address); #向套接字发送字符串变量 recv(CLIENT,0); #领受数据 print"$buff/n"; #把领受后的数据打入STDOUT close CLIENT; #封闭套接字 exit 1; #退出法式

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐