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的主要工作是对象写入通讯数据和从通讯数据获取对象。对象只是提供一个基础的处理规则,在应用中使用者必须从此类的基础上派生出新的协议处理对象。
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
android
c#
mClient = new Beetle.NetPackage.NetClient("127.0.0.1", 9088, new NPPackage(), this); mClient.LittleEndian = false; mClient.Connect();
开源数据库访问组件
开源多台平通讯组件
c#组件设计交流群:47164588
c# socket :136485198微博http://weibo.com/ikende