多平台Client TCP通讯组件
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();


开源数据库访问组件
开源多台平通讯组件
c#组件设计交流群:47164588
c# socket :136485198 微博http://weibo.com/ikende
多平台Client TCP通讯组件的更多相关文章
- TCP通讯处理粘包详解
TCP通讯处理粘包详解 一般所谓的TCP粘包是在一次接收数据不能完全地体现一个完整的消息数据.TCP通讯为何存在粘包呢?主要原因是TCP是以流的方式来处理数据,再加上网络上MTU的往往小于在应用处理的 ...
- 解决Linux 下server和client 通过TCP通讯:accept成功接收却报错的问题
今天在写简单的TCP通讯例子的时候,遇到了一个问题:server 和client能够连接成功,并且client也能够正常发送,但server就是接收不到,在网上搜索一番后,终于解决了问题.在这里整理如 ...
- BeetleX快速构建多平台的TCP和SSL TCP应用
对于普通开发者而言编写TCP应用通讯是一件相对复杂的工作,毕竟需要一系列的bytes操作:如果再针对SSL的安全性处理相信会把很多普通开发者拒之门外.为了简化这一问题BeetleX引入了Stream操 ...
- wp8使用Beetle.NetPackage实现基于TCP通讯的订单查询
在新版本的Beetle.NetPackage中提供了对Protobuf和Controller的支持,所以在WP8下使用Beetle.NetPackage进行基于TCP的数据交互则一件非常简单事情.下面 ...
- 'IOKING' TCP Transmission Server Engine ('云猴'©TCP通讯server引擎)(预告版)
关键词: IOKING IOCP TCP Transmission Server Engine Lock Free Interlocked 云猴完毕portTCP通讯server引擎 无锁 原子锁( ...
- Net Core开源通讯组件 SmartRoute
Net Core开源通讯组件 SmartRoute(服务即集群) SmartRoute是基于Dotnet Core设计的可运行在linux和windows下的服务通讯组件,其设计理念是去中心化和零配置 ...
- 基于Android 平台简易即时通讯的研究与设计[转]
摘要:论文简单介绍Android 平台的特性,主要阐述了基于Android 平台简易即时通讯(IM)的作用和功能以及实现方法.(复杂的通讯如引入视频音频等可以考虑AnyChat SDK~)关键词:An ...
- SignalR循序渐进(三)简易的集群通讯组件
上一篇演示了泛型Hub的实现,微软于6月17日更新了SignalR 2.1.0,然后自带了泛型Hub,于是就不需要自己去实现了…(微软你为啥不早一个月自带啊…).不过没关系,SignalR出彩之处不在 ...
- 简单的c# TCP通讯(TcpListener)
简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TC ...
随机推荐
- ffmpeg参数具体解释
a) 通用选项 -L license -h 帮助 -fromats 显示可用的格式,编解码的.协议的... -f fmt 强迫採用格式fmt,如image2.gif -i filename 输入文件 ...
- MEF框架在Silverlight中应用(15)
原文:MEF框架在Silverlight中应用(15) MEF框架在Silverlight中应用 代码下载 MEF框架是微软提供的一个插件框架.应用概括为一句话:输入,输出,组合.下面是具体在Silv ...
- C语言库函数大全及应用实例十
原文:C语言库函数大全及应用实例十 [编程资料]C语言库函数大全及应用实例十 函数名: qsort 功 能: 使 ...
- ResultSet取结果集多少条记录方法及分页概要
allst=toconn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); allsql = ...
- 纯CSS隔行换色
原文:纯CSS隔行换色 <head> <meta http-equiv="Content-Type" content="text/html; chars ...
- 权限设计实现(MVC4+Bootstrap+ PetaPoco+Spring.Net)
权限设计实现(MVC4+Bootstrap+ PetaPoco+Spring.Net) 一.前言 至毕业后一直在做企业Web开发,做过的项目也有不少,每个项目的框架设计都不是一样,但是每个项目的权限模 ...
- OCP-1Z0-051-题目解析-第11题
11. View the Exhibit and examine the structure of the PRODUCTS table.All products have a list price. ...
- HDU 4812 D Tree 树分区+逆+hash新位置
意甲冠军: 特定n点树 K 以下n号码是正确的点 以下n-1行给出了树的侧. 问: 所以,如果有在正确的道路点图的路径 % mod = K 如果输出路径的两端存在. 多条路径则输出字典序最小的一条. ...
- leetcode[90] Decode Ways
题目:如下对应关系 'A' -> 1 'B' -> 2 ... ‘Z’ -> 26 现在给定一个字符串,返回有多少种解码可能.例如:Given encoded message &qu ...
- bash元字符(上)
元字符 行动 样例 回车换行 结束一个命令 空格 切割命令行中的元素 ls /etc Tab 命令自己主动补全 # 開始一行凝视 #This is a comment line " 引用多个 ...