设为首页 收藏本站
查看: 1184|回复: 0

[经验分享] 尝试自己的Perl语言的包 TCP协议的再包装起到类似python语言装饰器的效果

[复制链接]

尚未签到

发表于 2018-8-30 11:46:21 | 显示全部楼层 |阅读模式
  #!/usr/bin/perl
  # Filename: BuildSocketTCP.pm
  #
  #   Copyright 2012 Axxeo GmbH
  #   Licensed under the Apache License, Version 2.0 (the "License");
  #   you may not use this file except in compliance with the License.
  #   You may obtain a copy of the License at
  #
  #       http://www.apache.org/licenses/LICENSE-2.0
  #
  #   Unless required by applicable law or agreed to in writing, software
  #   distributed under the License is distributed on an "AS IS" BASIS,
  #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  #   See the License for the specific language governing permissions and
  #   limitations under the License.
  #
  package BuildSocketTCP;
  require Exporter;
  @ISA = qw(Exporter);
  @EXPORT = qw(readfile checkfile);
  use IO::Socket::INET; # provides an object interface to creating and using Socket
  use strict 'vars'; # this generates a runtime error if you use symbolic references
  use constant false => 0;
  use constant true  => 1;
  # flush after every write
  $| = 1;
  #Create a new instance
  sub new {
  my $self = {}; # Connect the hash to the package Cocoa.
  shift;
  my ($ip, $port, $proto, $isserver) = @_;
  my $socket;
  my $self->{'ip'} = $ip;
  my $self->{'port'} = $port;
  if ($isserver == true && $proto == 'tcp')
  {
  my $socket = new IO::Socket::INET (
  #LocalHost => '0.0.0.0',
  LocalPort =>  $port ||'7777',
  Proto => 'tcp',
  Listen => 5,
  Reuse => 1) or die "* Error Server in Socket Creation : $!\n";
  print "TCP Server connected successful be created with port : $port\n";
  print "---------------------\n";
  $self->{'sock'} = $socket;
  }
  else
  {
  my $socket = new IO::Socket::INET (
  PeerHost =>  $ip || '127.0.0.1',
  PeerPort =>  $port ||'7777',
  Proto => 'tcp') or die "* Error Client in Socket Creation : $!\n";
  print "TCP Client connected successful be created with host : $ip\n";
  print "TCP Client connected successful be created with port : $port\n";
  print "---------------------\n";
  #print "$socket"."\n";
  $self->{'socket'} = $socket; #将新建的socket作为类似 类属性保存在dict里面
  }
  #print $self->{'socket'}."AAAA\n";
  bless ($self); # 这里应该注意只bless self变量本身
  return $self; # Return the reference to the hash.
  }
  #Subroutine to accept the socket
  sub acceptSocket
  {
  my $self = shift;
  return $self->{'socket'} = $self->{'sock'}->accept();
  }
  #Subroutine to close the socket
  sub closeSocket
  {
  my $self = shift;
  $self->{'socket'}->close() or die "* Error to close the socket"
  }
  #Subroutine to send the data
  sub sendViasocket
  {
  my $self = shift;
  my ($data_out, $length , $description) = @_;
  ($self->{'socket'})->send($data_out, $length);
  ($self->{'socket'})->flush;
  print "Send data successful via tcp socket>> : $description >>: $data_out\n";
  }
  #Subroutine to recv the data
  sub recvViasocket
  {
  my $self = shift;
  my ($length, $description) = @_;
  my $data_in;
  ($self->{'socket'})->recv($data_in,$length);
  ($self->{'socket'})->flush;
  #print "Recvied data successful via tcp socket: $description >>: $data_in\n";
  return $data_in;
  }
  1;
  这只是给大家提供一种思路,毕竟是第一次尝试写类似的东西,难免存在不足之处,希望大家谅解,这样类似与Python语言装饰器的效果,给一些基本的包里面的方法提供了更多扩展和美化的作用,也为后来使用提供了方便。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-558902-1-1.html 上篇帖子: perl链接数据库实例 下篇帖子: 用Perl语言实现CRC-16算法和应用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表