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. [ 单例、代理 & 通知 ]

    PS:手写单例.代理方法实现 & 通知的简单使用! [ 单例模式,代理设计模式,观察者模式! ] 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设 ...

  2. Hibernate制图(两)——许多-于─关系映射

    上篇学习了Hibernate的基本映射,也就是单表映射,非常easy就能理解,可是对于关系数据库来说,表之间存在关系是比不可少的.关系数据库中存在的关系是通过主外键建立起来的.反应到Hibernate ...

  3. easyui datagrid footer 页脚问题

    mvc 的一个例子 public string IndexV2() { var dataGridJson = new DataGridJson(); var data = new List<My ...

  4. java阅读器hdfs单纯demo

    周围环境:eclipse + eclipse hadoop插入. hadoop + rhel6.4 package test; import java.io.IOException; import j ...

  5. ASP.NET vNext (一)- 基本概念和环境配置

    ASP.NET vNext (一)- 基本概念和环境配置 转发:微软MVP 卢建晖 的文章,希望对大家有帮助. 编者语:时代在变,在csdn开博一年就发了那么的两篇文章,无论是什么原因都觉得有愧了.但 ...

  6. iframe的各项參数

    iframe的各项參数: <iframe src="test.jsp" width="100″ height="50″ frameborder=" ...

  7. Spring 之 第一个hellword

    Rod Johnson在2002年编著的<Expert one to one J2EE design and development>一 书中,对Java EE正统框架臃肿.低效.脱离现实 ...

  8. Codeforces 474A Keyboard (水

    题目链接:点击打开链接 键盘移位了,问输出相应的字母 #include <cstdio> #include <cstring> char a[105]; char b[3][1 ...

  9. javascript日历插件

    原文:javascript日历插件 javascript日历插件 最近在尝试着写javascript日历插件,所以也到github上看国外人日历源码,或者国内人写的好点的,也在研究点,虽然看到网上有一 ...

  10. VMware Linux 下 Nginx

    负载   VMware Linux 下 Nginx 安装配置 - nginx.conf 配置 [负载两个 Tomcat] (三) Weiseditor 2014-11-26 23:42 阅读:1 评论 ...