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

    mClient = new NetClient(getResources().getString(R.string.server_host),
    9088, new ChatPackage(), this);
  • wp8
    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)

使用Beetle.NetPackage简单实现android和wp聊天的更多相关文章

  1. 简单实现android和wp聊天

    使用Beetle.NetPackage简单实现android和wp聊天 Beetle.NetPackage是一个多台平开源Client TCP通讯组件,它针对不同平台提供统一的消息描述规则和使用规范可 ...

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

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

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

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

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

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

  5. 一个简单的Android小实例

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

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

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

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

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

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

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

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

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

随机推荐

  1. Clion+Cmake+Qt5+Qwt+msys2+MinGW在Windows下的安装配置使用教程

    摘要: CLion, a cross-platform C/C++ IDE. 本文主要介绍基于Clion作为IDE, MinGW作为编译器,CMake作为项目构建工具,开发基于Qt5.qwt的C++图 ...

  2. 利用kibana插件对Elasticsearch进行bool查询

    #bool查询#老版本的filtered查询已经被bool代替#用 bool包括 must should must_not filter来完成 ,格式如下:#bool:{#  "filter ...

  3. <玩转Django2.0>读书笔记:邮件和分页

    1. 发送邮件 # settings.py设置 # 邮箱设置 EMAIL_USE_SSL = True # 邮件服务器 EMAIL_HOST = 'smtp.qq.com' # 邮件服务端口 EMAI ...

  4. 使用Cors在WebApi中实现跨域请求,请求方式为angular的 $http.jsonp

    使用Cors在WebApi中实现跨域请求 第一步,在webapi项目中安装cors 在Web API配置文件中(Global.asax)进行全局配置: public class WebApiAppli ...

  5. 【C语言编程练习】5.9 爱因斯坦的阶梯问题

    1. 题目要求 有一个长阶梯,每2步上,最后剩1个台阶,若每3步上,最后剩2个台阶.若每5步上,最后剩4个台阶,若每6步上,最后剩5个台阶.只有每步上7阶,才可以刚好走完,请问台阶至少有多少阶? 2. ...

  6. Android Training

    Building Apps with Content Sharing Simple Data --> Intent && ActionProvider 介绍如何让应用程序共享简单 ...

  7. SpringBoot整合使用JdbcTemplate

    JdbcTemplate是Spring框架自带的对JDBC操作的封装,目的是提供统一的模板方法使对数据库的操作更加方便.友好,效率也不错. 整合使用JdbcTemplate实现对图书的添加功能小案例 ...

  8. CGI、FastCGI、PHP-FPM联系与区别(理解总结自其他博文)

    参考:http://blog.csdn.net/tyrantbear/article/details/52077321 参考:http://mp.weixin.qq.com/s?src=11& ...

  9. python print 中文重定向失败

    一直以来认为解决python字符集编码,不一定需要通过sys.setdefaultencoding.因为既然python实现过程中,默认禁用了该操作,说明是不推荐的. 通过不断的字符转换,也cover ...

  10. 一致性Hash算法在数据库分表中的实践

    最近有一个项目,其中某个功能单表数据在可预估的未来达到了亿级,初步估算在90亿左右.与同事详细讨论后,决定采用一致性Hash算法来完成数据库的自动扩容和数据迁移.整个程序细节由我同事完成,我只是将其理 ...