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. 优秀的前端project如何制定一个老师--html学习路径

    一个好的前端project教师发展,不是一蹴而就,它需要大量的学习和积累. 至于谁刚开始学习的人,如何入门.学习如何选择我的路线,做了各种工具? 1.  学习之前 1.不要着急看一些复杂网页效果的代码 ...

  2. C++中public,protected,private访问

    对于公有继承方式: (1)父类的public成员成为子类的public成员,允许类以外的代码访问这些成员:(2)父类的private成员仍旧是父类的private成员,子类成员不可以访问这些成员:(3 ...

  3. PL/SQL联系oracle成功可以sql解决的办法是检查表的名称无法显示

    有时,因为机器突然断电或其他原因PL/SQL它甚至不能在数据库表后显示.序列和其它元素.使用SQL Windows运行查询一般查询,登录或同样的现象再次. 我是不是可以解决因重复登录的猜测是,PLSQ ...

  4. 搭建一个三台服务器的Memcached集群

    关于memcached的基础知识可以查看博客其他博文,这里只记录了搭建的过程,谢谢! 1.分别在三台服务器上安装Memcached并启动 第一.由于memcached是基于libevent的事件处理, ...

  5. 在asp.net页面上按回车会触发Imagebutton控件的Click事件

    原文:在asp.net页面上按回车会触发Imagebutton控件的Click事件 问题: 用asp.net做的aspx页面,无论是否有文本框.下拉框.复选框……获得焦点,只要在当前页面上按一下回车就 ...

  6. 完整的thinphp+phpexcel实现excel报表的输出(有图有效果)

    准备工作:1.下载phpexcel1.7.6类包:2.解压至TP框架的ThinkPHP\Vendor目录下,改类包文件夹名为PHPExcel176,目录结构如下图:       编写代码(以一个订单汇 ...

  7. openSUSE13.1安装Nodejs并更新到最新版

    软件源中直接安装Nodejs即可 sudo zypper in nodejs 查看nodejs版本 sincerefly@linux-utem:~> node --version v0.10.5 ...

  8. Asp.net Identity 系列之 怎样修改Microsoft.AspNet.Identity.EntityFramework.IdentityUser 的 Id 字段的数据类型

    这篇博客我们来学习如何将AspNetUsers 表的Id 字段 的类型由nvarchar(128) 改为Int 并且子增长 1.为什么要修改 如果你运行过 Asp.net mvc 示例项目,你好会发现 ...

  9. WebIM(4)----Comet的特殊之处

    WebIM系列文章 在一步一步打造WebIM(1)一文中已经使用Comet实现了一个简单的WebIM,那么,Comet究竟和一般的打开网页有何区别,本文将通过编写一个简单的HTTP服务器来说明两者的区 ...

  10. 老调重弹--面向对象设计原则--S.O.L.I.D设计原则

    SRP - 单一职责原则 全称:Single Responsibility Principle 定义:每一个上下文对象(类.函数.变量等等)的定义应该仅仅包含单一的职责 描述:对象提供单一职责的高度封 ...