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

IMessage

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

flash

public class Register implements IMessage
{
public var Name:String;
public var EMail:String;
public var City:String;
public var Country:String;
public var RegTime:Date;
public function Register()
{
}
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 =new DateFormatter();
d.formatString="YYYY-MM-DD HH:NN:SS";
writer.writeUTF(d.format(RegTime));
}
}

android

public class Register implements IMessage {
public String Name;
public String EMail;
public String City;
public String Country;
public Date RegTime;
@Override
public void Load(DataInputStream stream) throws Exception {
// 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 = new SimpleDateFormat(format);
RegTime = sdf.parse(stream.readUTF());
}
@Override
public void Save(DataOutputStream stream) throws Exception {
// 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 = new SimpleDateFormat(format);
stream.writeUTF(sdf.format(RegTime));
}
}

c#

 public class Register:Beetle.NetPackage.IMessage
{
public String Name;
public String EMail;
public String City;
public String Country;
public DateTime RegTime;
public void Load(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 void Save(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 class NPPackage extends Package
{
public function NPPackage()
{
super();
}
protected override function WriteMessageType(writer:ByteArray, message:IMessage):void
{
writer.writeUTF(flash.utils.getQualifiedClassName(message));
}
protected override function GetMessage(reader:ByteArray):IMessage
{
var name:String = reader.readUTF();
if(name=="Register")
return new Register();
return null;
}
}

android

public class NPPackage extends Package {

    @Override
protected void WriteMessageType(DataOutputStream writer, IMessage message)
throws Exception {
// TODO Auto-generated method stub
writer.writeUTF(message.getClass().getSimpleName());
} @Override
protected IMessage GetMessage(DataInputStream reader) throws Exception {
// TODO Auto-generated method stub
String name= reader.readUTF();
if(name.equals("Register"))
return new Register();
return null;
} }

c#

 class NPPackage:Beetle.NetPackage.Package
{ protected override void WriteMessageType(Beetle.NetPackage.BufferStream writer, Beetle.NetPackage.IMessage message)
{
writer.WriteUTF(message.GetType().Name);
} protected override Beetle.NetPackage.IMessage GetMessage(Beetle.NetPackage.BufferStream reader)
{
string Name = reader.ReadUTF();
switch (Name)
{
case "Register":
return new Register();
}
return null;
}
}

INetClientHandler

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

 public interface INetClientHandler {

    void  Receive(NetClient client, Object msg);
void Error(NetClient client, Exception e);
void Disposed(NetClient client);
void Connected(NetClient client); }

NetClient

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

flash

mClient = new NetClient("127.0.0.1",9088,new NPPackage(),new NetClientHandler(
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();

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

多平台Client TCP通讯组件的更多相关文章

  1. TCP通讯处理粘包详解

    TCP通讯处理粘包详解 一般所谓的TCP粘包是在一次接收数据不能完全地体现一个完整的消息数据.TCP通讯为何存在粘包呢?主要原因是TCP是以流的方式来处理数据,再加上网络上MTU的往往小于在应用处理的 ...

  2. 解决Linux 下server和client 通过TCP通讯:accept成功接收却报错的问题

    今天在写简单的TCP通讯例子的时候,遇到了一个问题:server 和client能够连接成功,并且client也能够正常发送,但server就是接收不到,在网上搜索一番后,终于解决了问题.在这里整理如 ...

  3. BeetleX快速构建多平台的TCP和SSL TCP应用

    对于普通开发者而言编写TCP应用通讯是一件相对复杂的工作,毕竟需要一系列的bytes操作:如果再针对SSL的安全性处理相信会把很多普通开发者拒之门外.为了简化这一问题BeetleX引入了Stream操 ...

  4. wp8使用Beetle.NetPackage实现基于TCP通讯的订单查询

    在新版本的Beetle.NetPackage中提供了对Protobuf和Controller的支持,所以在WP8下使用Beetle.NetPackage进行基于TCP的数据交互则一件非常简单事情.下面 ...

  5. 'IOKING' TCP Transmission Server Engine ('云猴'©TCP通讯server引擎)(预告版)

    关键词: IOKING IOCP TCP  Transmission Server Engine Lock Free Interlocked 云猴完毕portTCP通讯server引擎 无锁 原子锁( ...

  6. Net Core开源通讯组件 SmartRoute

    Net Core开源通讯组件 SmartRoute(服务即集群) SmartRoute是基于Dotnet Core设计的可运行在linux和windows下的服务通讯组件,其设计理念是去中心化和零配置 ...

  7. 基于Android 平台简易即时通讯的研究与设计[转]

    摘要:论文简单介绍Android 平台的特性,主要阐述了基于Android 平台简易即时通讯(IM)的作用和功能以及实现方法.(复杂的通讯如引入视频音频等可以考虑AnyChat SDK~)关键词:An ...

  8. SignalR循序渐进(三)简易的集群通讯组件

    上一篇演示了泛型Hub的实现,微软于6月17日更新了SignalR 2.1.0,然后自带了泛型Hub,于是就不需要自己去实现了…(微软你为啥不早一个月自带啊…).不过没关系,SignalR出彩之处不在 ...

  9. 简单的c# TCP通讯(TcpListener)

      简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TC ...

随机推荐

  1. Java数据库编程、XML解析技术

    数据库编程 JDBC概述 是Java Database Connecive,即数据库连接技术的简称,它提供了连接各种常用数据库的能力. 是一种用于执行SQL语句的Java API,可以为多种关系数据库 ...

  2. CSS3+HTML5特效1 - 上下滑动效果

    先看看效果,把鼠标移上去看看. back front 1. 本实例需要以下元素: a. 外容器 box b. 内容器 border c. 默认显示内容 front d. 滑动内容 back 2. 外容 ...

  3. 开始 space viking 之旅

     设备 cocos2d-v2 眼下cocos2d-v3也不太稳定,它在很大程度上仍然是变化的功能. 对于稳定.我们仍然使用 v2 wget -c http://cocos2d-iphone.goo ...

  4. 聊聊单元測试(一)——EasyMock

    一.单元測试是保证软件质量的重要方法. 单元測试是对系统中某个模块功能的验证,但我们总会遇到这样那样的问题,导致測试代码非常难编写.最直接的一个原因便是强耦合关系,被測试者依赖一些不easy构造,比較 ...

  5. VS2010类模板修改——添加版权、说明

    VS2010类模板修改——添加版权.说明 最近在学习使用Memcache,就想着用C#代码写一个实现Cache与Memcache以及将来若是能融入Redis切换使用的程序集...不过刚开始写代码,强迫 ...

  6. 继续推荐几款VisualStudio的插件

    原文:继续推荐几款VisualStudio的插件 继前几天推荐了一款转换vs插件的插件后,借着安装VS2013之际,把我比较喜欢的几个插件继续推荐一下. C# Outline 2013 2013 C# ...

  7. 新秀nginx源代码分析数据结构篇(两) 双链表ngx_queue_t

    nginx源代码分析数据结构篇(两) 双链表ngx_queue_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn. ...

  8. ASP.NET MVC局部视图

    使用ASP.NET MVC局部视图避免JS拼接HTML,编写易于维护的HTML页面   以前使用ASP.NET WebForm开发时,喜欢使用Repeater控件嵌套的方式开发前台页面,这样就不用JS ...

  9. JS中apply与call的含义与区别

    JavaScript中,apply()与call()的含义一样,均为改变调用函数中的this指向.其中apply()与call()的第一个参数表示所要指向的对象,若调用函数无参数可不写,则默认为win ...

  10. Gimp插件Hello world注释

    前一阵翻译gimp官网的编写插件教程,本打算继续翻译第二部分,但是感觉第一个例子还不是很懂,翻译第二部分有点理解不能,所以就读了一下源码,记录如下 #include <libgimp/gimp. ...