多平台Client TCP通讯组件

摘要:
Beetle.NetPackage是一个多平台ClientSocketTCP通讯组件,组件制统一的对象协议制定规则,可以灵活方便地通过对象来描述TCP通讯交互。现有支持平台有Flash,.NET和Android。组件为了统一编写规范制定了不同语言平台下访问TCP服务的统一处理规则;分别有协议描述规范和消息处理控制。不同语言平台下都提供了一致的对象和接口主要包括:IMessage,Packge,INetClientHandler和NetClient等。flashpublicclassRegisterimplementsIMessage{publicvarName:String;publicvarEMail:String;publicvarCity:String;publicvarCountry:String;publicvarRegTime:Date;publicfunctionRegister(){}publicfunctionLoad:void{Name=reader.readUTF();EMail=reader.readUTF();City=reader.readUTF();Country=reader.readUTF();vardv:String=reader.readUTF();RegTime=DateFormatter.parseDateString;}publicfunctionSave:void{writer.writeUTF;writer.writeUTF;writer.writeUTF;writer.writeUTF;vard:DateFormatter=newDateFormatter();d.formatString="YYYY-MM-DDHH:NN:SS";writer.writeUTF;}}androidpublicclassRegisterimplementsIMessage{publicStringName;publicStringEMail;publicStringCity;publicStringCountry;publicDateRegTime;@OverridepublicvoidLoadthrowsException{//TODOAuto-generatedmethodstubName=stream.readUTF();EMail=stream.readUTF();City=stream.readUTF();Country=stream.readUTF();Stringformat="yyyy-MM-ddHH:mm:ss";SimpleDateFormatsdf=newSimpleDateFormat;RegTime=sdf.parse;}@OverridepublicvoidSavethrowsException{//TODOAuto-generatedmethodstubstream.writeUTF;stream.writeUTF;stream.writeUTF;stream.writeUTF;Stringformat="yyyy-MM-ddHH:mm:ss";SimpleDateFormatsdf=newSimpleDateFormat;stream.writeUTF;}}c#publicclassRegister:Beetle.NetPackage.IMessage{publicStringName;publicStringEMail;publicStringCity;publicStringCountry;publicDateTimeRegTime;publicvoidLoad{Name=reader.ReadUTF();EMail=reader.ReadUTF();City=reader.ReadUTF();Country=reader.ReadUTF();stringdate=reader.ReadUTF();Console.WriteLine;RegTime=DateTime.ParseExact;}publicvoidSave{writer.WriteUTF;writer.WriteUTF;writer.WriteUTF;writer.WriteUTF;writer.WriteUTF;}}Package该对象是用于通讯协议描述,默认实现4字节描述消息大小规范。Package的主要工作是对象写入通讯数据和从通讯数据获取对象。

Beetle.NetPackage是一个多平台Client Socket TCP通讯组件(Apache License 2.0),组件制统一的对象协议制定规则,可以灵活方便地通过对象来描述TCP通讯交互。现有支持平台有Flash,.NET和Android。组件为了统一编写规范制定了不同语言平台下访问TCP服务的统一处理规则;分别有协议描述规范和消息处理控制。不同语言平台下都提供了一致的对象和接口主要包括:IMessage,Packge,INetClientHandler和NetClient等。

IMessage

消息描述接口,所有通讯消息必须实现相关规则。

flash

复制代码
public class Register implementsIMessage
    {        
        public varName:String;        
        public varEMail:String;        
        public varCity:String;
        public varCountry:String;        
        public varRegTime:Date;      
        public functionRegister()
        {
        }
        public function Load(reader:ByteArray):void{
            Name=reader.readUTF();
            EMail=reader.readUTF();
            City=reader.readUTF();
            Country =reader.readUTF();
            var dv:String=reader.readUTF();
            RegTime=DateFormatter.parseDateString(dv);
        }    
        public function Save(writer:ByteArray):void{
            writer.writeUTF(Name);
            writer.writeUTF(EMail);
            writer.writeUTF(City);
            writer.writeUTF(Country);
            var d:DateFormatter =newDateFormatter();
            d.formatString="YYYY-MM-DD HH:NN:SS";
            writer.writeUTF(d.format(RegTime));        
        }
    }
复制代码

android

复制代码
public class Register implementsIMessage {   
    publicString Name;   
    publicString EMail;  
    publicString City; 
    publicString Country;  
    publicDate RegTime;  
    @Override
    public void Load(DataInputStream stream) throwsException {
        //TODO Auto-generated method stub
        Name =stream.readUTF();
        EMail =stream.readUTF();
        City =stream.readUTF();
        Country =stream.readUTF();
        String format = "yyyy-MM-dd HH:mm:ss";
        SimpleDateFormat sdf = newSimpleDateFormat(format);
        RegTime =sdf.parse(stream.readUTF());  
    }
    @Override
    public void Save(DataOutputStream stream) throwsException {
        //TODO Auto-generated method stub
stream.writeUTF(Name);
        stream.writeUTF(EMail);
        stream.writeUTF(City);
        stream.writeUTF(Country);
        String format = "yyyy-MM-dd HH:mm:ss";
        SimpleDateFormat sdf = newSimpleDateFormat(format);
        stream.writeUTF(sdf.format(RegTime));
    }
}
复制代码

c#

复制代码
 public classRegister:Beetle.NetPackage.IMessage
    {
        publicString Name;
        publicString EMail;
        publicString City;
        publicString Country;
        publicDateTime RegTime;
        public voidLoad(Beetle.NetPackage.BufferStream reader)
        {
            Name =reader.ReadUTF();
            EMail =reader.ReadUTF();
            City =reader.ReadUTF();
            Country =reader.ReadUTF();
            string date =reader.ReadUTF();
            Console.WriteLine(date);
            RegTime = DateTime.ParseExact(date, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
        }
        public voidSave(Beetle.NetPackage.BufferStream writer)
        {
            writer.WriteUTF(Name);
            writer.WriteUTF(EMail);
            writer.WriteUTF(City);
            writer.WriteUTF(Country);
            writer.WriteUTF(RegTime.ToString("yyyy-MM-dd HH:mm:ss"));
        }
    }
复制代码

Package

该对象是用于通讯协议描述,默认实现4字节描述消息大小规范。Package的主要工作是对象写入通讯数据和从通讯数据获取对象。对象只是提供一个基础的处理规则,在应用中使用者必须从此类的基础上派生出新的协议处理对象。

多平台Client TCP通讯组件第7张

flash

复制代码
public classNPPackage extends Package
    {
        publicfunction NPPackage()
        {
            super();
        }
        protected override function  WriteMessageType(writer:ByteArray, message:IMessage):void{
            writer.writeUTF(flash.utils.getQualifiedClassName(message));    
        }        
        protected overridefunction GetMessage(reader:ByteArray):IMessage
        {
            var name:String =reader.readUTF();
            if(name=="Register")
                return newRegister();
            return null;
        }
    }
复制代码

android

复制代码
public classNPPackage extends Package {
    @Override
    protected voidWriteMessageType(DataOutputStream writer, IMessage message)
            throws Exception {
        //TODO Auto-generated method stub
writer.writeUTF(message.getClass().getSimpleName());
    }
    @Override
    protectedIMessage GetMessage(DataInputStream reader) throws Exception {
        //TODO Auto-generated method stub
        String name=reader.readUTF();
        if(name.equals("Register"))
            return newRegister();
        return null;
    }
}
复制代码

c#

复制代码
 classNPPackage:Beetle.NetPackage.Package
    {
        protected override voidWriteMessageType(Beetle.NetPackage.BufferStream writer, Beetle.NetPackage.IMessage message)
        {
            writer.WriteUTF(message.GetType().Name);
        }
        protected overrideBeetle.NetPackage.IMessage GetMessage(Beetle.NetPackage.BufferStream reader)
        {
            string Name =reader.ReadUTF();
            switch(Name)
            {
                case "Register":
                    return newRegister();
            }
            return null;
        }
    }
复制代码

INetClientHandler

该接口主要用于描述TCP连接处理规则,包括有数据接收事件,错误处理事件,连接创建成功和失败事件。

复制代码
 public interfaceINetClientHandler {
    voidReceive(NetClient client, Object msg);
    voidError(NetClient client, Exception e);
    voidDisposed(NetClient client);
    voidConnected(NetClient client);
}
复制代码

NetClient

该对象主要用于创建TCP通讯和进行消息发送接收处理。

flash

复制代码
mClient = new NetClient("127.0.0.1",9088,new NPPackage(),newNetClientHandler(
    ClientReceive,ClientError,ClientDisposed,ClientConnected));
mClient.SocketEndian =Endian.BIG_ENDIAN;
mClient.Connect();
复制代码

android

复制代码
mClient = new NetClient("10.0.2.2", 9088, new NPPackage(), this);
mClient.Connect();
复制代码

c#

复制代码
mClient = new Beetle.NetPackage.NetClient("127.0.0.1", 9088, new NPPackage(), this);
mClient.LittleEndian = false;
mClient.Connect();
复制代码

多平台Client TCP通讯组件第22张

项目站点:https://beetlenp.codeplex.com/

可靠、高性能的Socket TCP通讯组件
开源数据库访问组件
开源多台平通讯组件
c#组件设计交流群:47164588
c# socket :136485198微博http://weibo.com/ikende

免责声明:文章转载自《多平台Client TCP通讯组件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇11-C#反射机制如何使用蓝湖设计稿同时适配PC及移动端下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

springsession生成sessionid不一致问题解决

不废话,本人遇到的问题主要是两个不同的springboot版本,需要共享sessionid。 1.配置application #cookie作用域server.servlet.session.cookie.path=/server.servlet.session.cookie.max-age=-1server.servlet.session.cookie....

Android ORM——初识greenDAO 3及使用greenDAO 3前应该掌握的一些知识点(一)

引言 总所周知,SQLite——内嵌于Android中一个占用内存极小的关系型,作为我们Android存储领域中重要的一员 ,或多或少都曾接触到数据库。即使Android系统中提供了很多操作SQLite的API,可是在业务开发中还是须要手动去编写原生SQL语句,这不仅复杂、不好维护。更重要的是不高效,经常会由于SQL语句写错而添加了开发成本,于是便出现...

使用curses管理基于文本的屏幕--(八)

CD管理程序现在我们已经了解了curses所提供了功能,我们可以继续开发我们的例子程序。在这里所展示是一个使用curses库的C语言版本。他提供了一些高级的特性,包括更为清晰的屏幕信息显示以及用于跟踪列表的滚动窗口。完整的程序共页长,所以我们将其分为几部分,在每一部分中介绍一些函数。试验--一个新的CD管理程序1 首先,我们包含所有的头文件以及一些全局常量...

通过JDBC进行简单的增删改查(以MySQL为例)

通过JDBC进行简单的增删改查(以MySQL为例) 目录 前言:什么是JDBC 一、准备工作(一):MySQL安装配置和基础学习 二、准备工作(二):下载数据库对应的jar包并导入 三、JDBC基本操作 (1)定义记录的类(可选) (2)连接的获取 (3)insert (4)update (5)select (6)delete 四、测试 五、代码分析 六...

springboot制作自定义starter

自定义starterSpringBoot中的starter是一种非常重要的机制,能够抛弃以前繁杂的配置,将其统一集成进 starter,应用者只需要在maven中引入starter依赖,SpringBoot就能自动扫描到要加载的信息并启 动相应的默认配置。starter让我们摆脱了各种依赖库的处理,需要配置各种信息的困扰。 SpringBoot会自动通过...

在datasnap 中使用unidac 访问数据(服务器端)

从delphi 6 开始,datasnap 作为delphi 自带的多层框架,一直更新到最新的delphi 10.3 。同时逐步增加了很多新的功能 ,比如支持REST 调用,支持 IIS ,apache 等服务器。今天简单介绍一下如何在datasnap 中使用unidac 访问数据库。 首先,按照向导生成一个标准的datasnap 服务器。 、...