使用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. 回想一下著名的BigTable论题

    GFS捕捉一些业务场景的分布式文件系统的需求.很自然.此外还有一些与他们一些业务或依赖于文件系统是不那么容易,他们需要一个分布式数据库系统. BigTable那是,Google结构化数据处理的需求而产 ...

  2. 在Mac电脑上为Dash制作docSet文档

    Dash是mac上的一款查看API的工具,里面能够直接下载大部分的API文档,可是有时候我们假设想把自己手里已有的文档也集成到Dash中,就须要我们自己动手了,事实上Dash官方也有教程怎样制作doc ...

  3. 修改vim/terminal配色

    http://blog.csdn.net/angle_birds/article/details/11694325

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

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

  5. ASP.NET Web API和ASP.NET Web MVC中使用Ninject

    ASP.NET Web API和ASP.NET Web MVC中使用Ninject 先附上源码下载地址 一.准备工作 1.新建一个名为MvcDemo的空解决方案 2.新建一个名为MvcDemo.Web ...

  6. 关于s2sh框架关于hibernate懒加载问题的说明和解决方案

    首先我们来看下面这个图,解释了一个web程序的一次请求流程! 懒加载异常的说明: 懒加载就是我们在查询一个对象时,它所有的属性是否要被查出来! 如果懒加载开启的话,session在service层就被 ...

  7. jQuery选取和操纵元素的特点

    jQuery选取和操纵元素的特点 JavaScript选取元素 先来看看不用jQuery的时候我们是怎么处理元素选取的. JavaScript选取元素的时候,可以根据id获取元素,当id不存在的时候, ...

  8. 安装WindowsXP操作系统(安装版) - 初学者系列 - 学习者系列文章

    本文主要介绍下Windows XP操作系统的安装. 1.             将光驱装入光驱.启动电脑,在开始界面按下DEL键,进入BIOS设置界面.将光驱设置为第一启动项.下面以虚拟机为例子. ...

  9. 【MS SQL】数据库维护计划之数据库备份(一)

    原文:[MS SQL]数据库维护计划之数据库备份(一) 在做数据库备份之前,一定会听到:完整备份.差异备份.增量备份.事务日志备份...等词:下面配图进行说明. 完整备份:完整数据库备份包含数据库中的 ...

  10. Android 获取截图 并将其保存到本地sd在卡路径

    /** * 获取当前屏幕和保存截图 */ private void GetandSaveCurrentImage() { //1.构建Bitmap WindowManager windowManage ...