perl socket编程

soket是网络套接字,它是ip地址和端口号的组合。在perl中使用套接字需要SOCKET模块;以经过测试可以使用:下面使用如下的例子进行说明:

服务器端:

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

listen(SOCK,SOMAXCONN);#监听
while(1)
{
  print "wait for a connect\n";
while(1){
  last if my $addr1=accept(S,SOCK);#接收连接
}
print "connected\n";
S->autoflush(1);#内容不会放入缓存直接就可以输出
while(1){
 next unless $msg_in=<S>;#使用套接字的描述符和文件描述符一样,这样相对于c的socket就更加方便了,当然也可以使用send, recv等函数。注意接收到的内容结尾处已经包含换行符。
 last if($msg_in=~ /quit/i || $msg_in =~ /q/i);
 print "$msg_in";
 print S "send back: $msg_in";
 }
}
 close S;
 close SOCK;


客户端:

#!/usr/bin/perl -w
use Socket;
use IO::Handle;
socket(SOCK,AF_INET,SOCK_STREAM,getprotobyname("tcp"));
my $addr=sockaddr_in(3000,inet_aton("localhost"));
connect(SOCK,$addr);
SOCK->autoflush(1);
while(1){
 print "send msg:\n";
 $in=<STDIN>;#已经包含结束符了
 if($in =~ /quit/i || $in =~ /q/i)
 {
    print SOCK "$in";
    print "bye\n";
    exit 1;
 }
 else
 {
   print SOCK "$in";
   $hh=<SOCK>;
   print "recieve massage from server: $hh";
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值