尝试自己的Perl语言的包 UDP协议的再包装起到类似python语言装饰器的效果

#!/usr/bin/perl

# Filename: BuildSocketUDP.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 BuildSocketUDP;

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 == ‘udp‘)

{

#print "Buldi socket for server\n";

$socket = new IO::Socket::INET(

LocalPort => $port || ‘8765‘,

Blocking => ‘0‘,

Proto    => $proto) or die "* Error Server in Socket Creation : $!\n";

print "UDP Server connected successful be created with port : $port\n";

print "---------------------\n";

}

else

{

#print "Buldi socket for client\n";

$socket = new IO::Socket::INET(

PeerHost => $ip  || ‘127.0.0.1‘,

PeerPort => $port || ‘8765‘,

Blocking => ‘0‘,

Proto    => $proto) or die "* Error Client in Socket Creation : $!\n";

print "UDP Client connected successful be created with host : $ip\n";

print "UDP Client connected successful be created with port : $port\n";

print "---------------------\n";

}

#print "$socket"."\n";

$self->{‘socket‘} = $socket;

#print $self->{‘socket‘}."AAAA\n";

bless ($self);

return $self; # Return the reference to the hash.

}

#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);

#($self->{‘socket‘})->flush;

#print "Send data successful via udp 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 udp socket: $description >>: $data_in\n";

return $data_in;

}

1; # 当然不要忘了这个不知所以然的1

这只是给大家提供一种思路,毕竟是第一次尝试写类似的东西,难免存在不足之处,希望大家谅解,这样类似与Python语言装饰器的效果,给一些基本的包里面的方法提供了更多扩展和美化的作用,也为后来使用提供了方便。

时间: 2024-10-13 11:50:52

尝试自己的Perl语言的包 UDP协议的再包装起到类似python语言装饰器的效果的相关文章

尝试自己的Perl语言的包 TCP协议的再包装起到类似python语言装饰器的效果

#!/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 t

go语言net包udp socket的使用

udp与tcp的不同在于客户端请求方式不同,udp缺少Accept函数. 一个简单的udp客户端: package main; import ( "net" "log" "fmt" ) func chkError(err error) { if err != nil { log.Fatal(err); } } func main() { //获取udpaddr udpaddr, err := net.ResolveUDPAddr("ud

Python 语言规范

pychecker ? 对你的代码运行pychecker 定义: pychecker 是一个在Python 源代码中查找bug 的工具. 对于C 和C++这样的不那 么动态的(译者注: 原文是less dynamic)语言, 这些bug 通常由编译器来捕获. pychecker 和lint 类似. 由于Python 的动态特性, 有些警告可能不对. 不过伪告警 应该很少. 优点: 可以捕获容易忽视的错误, 例如输入错误, 使用未赋值的变量等. 缺点: pychecker 不完美. 要利用其优势,

Python语言规范

Lint 对你的代码运行pylint 定义: pylint是一个在Python源代码中查找bug的工具. 对于C和C++这样的不那么动态的(译者注: 原文是less dynamic)语言, 这些bug通常由编译器来捕获. 由于Python的动态特性, 有些警告可能不对. 不过伪告警应该很少. 优点: 可以捕获容易忽视的错误, 例如输入错误, 使用未赋值的变量等. 缺点: pylint不完美. 要利用其优势, 我们有时侯需要: a) 围绕着它来写代码 b) 抑制其告警 c) 改进它, 或者d) 忽

Python中的端口协议之基于UDP协议的通信传输

UDP协议: 1.python中基于udp协议的客户端与服务端通信简单过程实现 2.udp协议的一些特点(与tcp协议的比较) ------------------------------------------------------------------------------------------------------------------------------------- 一.UDP协议:OSI七层协议中的传输协议的一种(另外一种tcp协议),他们都是一种端口协议 与TCP协

Go语言之包管理

什么是 Go 语言中的包 我们在使用其他语言,比如 Java ,是有包的概念的.它是 Java 语言中组织我们的 Java 文件的一个概念,比如java.lang这个包,它里面有很多我们常用的类,比如 String.在 Go 语言中,包也是类似的概念.它是把我们的 Go 文件组织起来,可以方便进行归类.复用等, 比如 Go 内置的 net 包. net ├── http ├── internal ├── mail ├── rpc ├── smtp ├── testdata ├── textpro

安装R语言的包的方法

安装R语言的包的方法: 1. 在线安装 在R的控制台,输入类似install.packages("TSA")  # 安装 TSA install.packages("TSA", contriburl="url",  dependencies = TRUE) # 安装TSA 2. 手动安装(离线安装) 在Windows下: 下载对应的package.zip文件 打开R的菜单条->Packages->"Install packa

R语言的包管理功能

现代的开发语言都已经不再是单一的编程语言和编译环境,而是一个网络化的分布式系统.通过包(packages)管理程序进行软件模块的安装.卸载.更新等操作. 包管理的思路从Linux操作系统而来,通过Debian的apt-get可以从全球数万个网站快速获取软件的最新版本.在Mac OS X上也可以通过MacPort或Brew进行软件包的管理.Java语言自己不带包管理程序,但可通过maven进行包的自动下载和编译.链接.nodejs是通过npm进行包管理.python通过pip进行包管理.这些都是在

R语言diagram包画订单状态流图

代码如下: library("diagram") #a <- read.table(file="clipboard",header=TRUE) write.table(a,file="a.txt",sep=";") aa <- a c <- matrix(nrow=ncol(aa),ncol=ncol(aa),0) i <- 1 while(i<=ncol(aa)){ j <- 1 whil