使用Beetle.NetPackage简单实现android和wp聊天

Beetle.NetPackage是一个多台平开源Client TCP通讯组件,它针对不同平台提供统一的消息描述规则和使用规范可以简单实现多平台下TCP通讯交互.下而介绍通过Beetle.NetPackage简单实地现android和wp聊天.在了解下面的内容之前可以先到Beetle.NetPackage的开源项目了解一下:https://beetlenp.codeplex.com/

  作为一个网络通讯程序首要是制定一个协议明确有那些消息交互,在Beetle.NetPackage中所有协议描述都必须通过对象来描述,并实现一个基础的流读写接口IMessage.聊天需要制定两个消息分别就是登陆和发言.下面分别看一下这两个消息在android和wp下的实现.

  • android

    public class Login implements IMessage {
    
        public String Name;
    @Override
    public void Load(IDataReader stream) throws Exception {
    // TODO Auto-generated method stub
    Name = stream.ReadUTF();
    }
    @Override
    public void Save(IDataWriter stream) throws Exception {
    // TODO Auto-generated method stub
    stream.WriteUTF(Name);
    }
    }
    public class Talk implements IMessage {
    public String Name;
    public String Agent;
    public String Content;
    @Override
    public void Load(IDataReader stream) throws Exception {
    // TODO Auto-generated method stub
    Name = stream.ReadUTF();
    Agent = stream.ReadUTF();
    Content = stream.ReadUTF();
    }
    @Override
    public void Save(IDataWriter stream) throws Exception {
    // TODO Auto-generated method stub
    stream.WriteUTF(Name);
    stream.WriteUTF(Agent);
    stream.WriteUTF(Content);
    }
    }
  • WP8
    public class Login:Beetle.NetPackage.IMessage
    {
    public string Name; public void Load(Beetle.NetPackage.IDataReader reader)
    {
    Name = reader.ReadUTF();
    } public void Save(Beetle.NetPackage.IDataWriter writer)
    {
    writer.WriteUTF(Name);
    }
    }
    public class Talk:Beetle.NetPackage.IMessage
    {
    public string Name;
    public string Content;
    public string Agent;
    public void Load(Beetle.NetPackage.IDataReader reader)
    {
    Name = reader.ReadUTF();
    Agent = reader.ReadUTF();
    Content = reader.ReadUTF();
    }
    public void Save(Beetle.NetPackage.IDataWriter writer)
    {
    writer.WriteUTF(Name);
    writer.WriteUTF(Agent);
    writer.WriteUTF(Content);
    }
    }

  消息描述完成后就针对协议解释对象实现相应的Package

  • android

    public class ChatPackage extends Package {
    
        @Override
    protected void WriteMessageType(IDataWriter writer, IMessage message)
    throws Exception {
    // TODO Auto-generated method stub
    writer.WriteUTF(message.getClass().getSimpleName());
    } @Override
    protected IMessage GetMessage(IDataReader reader) throws Exception {
    // TODO Auto-generated method stub
    String name= reader.ReadUTF();
    if(name.equals("Talk"))
    {
    return new Talk();
    }
    else if(name.equals("Login"))
    {
    return new Login();
    }
    return null;
    }
    }
  • wp8
    public class ChatPackage:Beetle.NetPackage.Package
    {
    protected override void WriteMessageType(Beetle.NetPackage.IDataWriter writer, Beetle.NetPackage.IMessage message)
    {
    writer.WriteUTF(message.GetType().Name);
    } protected override Beetle.NetPackage.IMessage GetMessage(Beetle.NetPackage.IDataReader reader)
    {
    string name = reader.ReadUTF();
    switch (name)
    {
    case "Talk":
    return new Talk();
    case "Login":
    return new Login();
    }
    return null;
    }
    }

  定义了消息和协议解释对象后就可以通过NetClient创建服务端的连接,由于Beetle.NetPackage只是Client端的实现服务就根据自己的需要来编写了,这里方便演示就使用了Beetle作为服务端来进行测试.

  • android

    1
    2
    mClient = new NetClient(getResources().getString(R.string.server_host),
                    9088, new ChatPackage(), this);
  • wp8
    1
    2
    mClient = new Beetle.NetPackage.NetClient("192.168.0.104", 9088, new ChatPackage(), this);
                mClient.LittleEndian = false;

  两者定义基于一致,但wp8下NetClient有个LittleEndian属性需要设置,主要原因是android是java数值存储是Big-Endian;而.net默认是Little-Endian因此对应属性要设置False.在编写服务端的时候也应该注意到这一点.以上通讯功能就基础完成,对于数据发送和接收紧紧是消息对象的定义和调用就不多说,详情可以下载源码来了解一下.  

最终看下例子运行的效果:

 下载完整代码:NPChat.rar (2.68 mb)

简单实现android和wp聊天的更多相关文章

  1. 使用Beetle.NetPackage简单实现android和wp聊天

    Beetle.NetPackage是一个多台平开源Client TCP通讯组件,它针对不同平台提供统一的消息描述规则和使用规范可以简单实现多平台下TCP通讯交互.下而介绍通过Beetle.NetPac ...

  2. android复习第一天-----简单的android常识

    前言:要去面试了,这些天花一些事件把android中简单的知识点来串联的复习一下 1,android中的工程结构 src文件夹:存储android文件的源代码 gen文件夹:有工具自动生成,不要去修改 ...

  3. 一款非常简单的android音乐播放器源码分享给大家

    一款非常简单的android音乐播放器源码分享给大家,该应用虽然很小,大家常用的播放器功能基本实现了,可能有点还不够完善,大家也可以自己完善一下,源码在源码天堂那里已经有了,大家可以到那里下载学习吧. ...

  4. 一个简单的Android小实例

    原文:一个简单的Android小实例 一.配置环境 1.下载intellij idea15 2.安装Android SDK,通过Android SDK管理器安装或卸载Android平台   3.安装J ...

  5. Android高效的应用程序开发工具集1---ant构建一个简单的Android工程

    在java编译那些事通过提到ant编译Java工程,如今扩大到用它来构建Android目,事实上道理是相通的.变化的仅仅是使用的形式.ant构建相比IDE的优点是多个子项目使用自己定义jar包时,an ...

  6. 简单的 Android 拍照并显示以及获取路径后上传

    简单的 Android 拍照并显示以及获取路径后上传 Activity 中的代码,我只贴出重要的事件部分代码 public void doPhoto(View view) { destoryBimap ...

  7. android json解析及简单例子+Android与服务器端数据交互+Android精彩案例【申明:来源于网络】

    android json解析及简单例子+Android与服务器端数据交互+Android精彩案例[申明:来源于网络] android json解析及简单例子:http://www.open-open. ...

  8. 我的博客:C# PHP J2ee Java Android js WP Asp.net mvc Python

    <p><A target="_blank" href="http://blog.163.com/hr_company_product/" &g ...

  9. 基于qml创建最简单的android机图像采集程序

    前提是在已经搭建为android编写程序的qt平台上面,我们只需要简单几部就可以搭建最简单的android机图像采集程序 1.生成新的ququick app 2.在配置中添加 multimedia,因 ...

随机推荐

  1. poj 1556 zoj1721 BellmanFord 最短路+推断直线相交

    http://poj.org/problem?id=1556 The Doors Time Limit: 1000MS   Memory Limit: 10000K Total Submissions ...

  2. rpm安装FAQ

    1.error: cannot create %sourcedir /usr/src/redhat/SOURCES错误的解决方案 显现error: cannot create %sourcedir / ...

  3. 尚学堂Java面试题整理

    博客分类: 经典分享   1. super()与this()的差别? - 6 -  2. 作用域public,protected,private,以及不写时的差别? - 6 -  3. 编程输出例如以 ...

  4. Windows安全事件日志中的事件编号与描述

    帐号登录事件(事件编号与描述) 672 身份验证服务(AS)票证得到成功发行与验证.673 票证授权服务(TGS)票证得到授权.TGS是一份由Kerberos 5.0版票证授权服务(TGS)发行.且允 ...

  5. Visual Studio 单元测试之四---Generic测试

    原文:Visual Studio 单元测试之四---Generic测试 这里的Generic我觉得理解为外部测试更合适.因为在这种测试模式下Visual Studio只是启动一个外部的程序,然后通过返 ...

  6. OCP-1Z0-051-题目解析-第5题

    5. Which SQL statements would display the value 1890.55 as $1,890.55? (Choose three .) A. SELECT TO_ ...

  7. solr主从复制

    solr主从复制 最近的开发工作涉及到两个模块“任务”和“日周报”.关系是日周报消费任务,因为用户在写日周报的时候,需要按一定的规则筛选当前用户的任务,作为日周报的一部分提交.整个项目采用类似于Orc ...

  8. 使用JasperReport+iReport进行Web报表开发

    使用JasperReport+iReport进行Web报表开发 前言 在实际工程中非常,报告是其中很重要的一部分,结果以报表的形式呈现出来.这里所提到的报表可不是简单的二维表,而是拥有复杂表头的.多维 ...

  9. bash下几个替换运算符的区分

    bash下几个替换运算符的区分 2012-03-21 22:20:54 分类: Python/Ruby 一直对四个替换运算符比较的迷惑,分布太清楚,记下来避免再次遗忘:   ${name:-word} ...

  10. 解决ZF2_PATH environment

    本方法基于:ZendFramework 2.1.4版本在WIN7下构建,其他版本的安装方式相差不大. 操作之前您需要搭建好PHP运行环境,保证PHP版本不低于PHP 5.3.3,并且去http://f ...