#!/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语言装饰器的效果,给一些基本的包里面的方法提供了更多扩展和美化的作用,也为后来使用提供了方便。
总结以上是内存溢出为你收集整理的尝试自己的Perl语言的包 TCP协议的再包装起到类似python语言装饰器的效果全部内容,希望文章能够帮你解决尝试自己的Perl语言的包 TCP协议的再包装起到类似python语言装饰器的效果所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)