使用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. Tomcat剖析(四):Tomcat默认连接器(1)

    Tomcat剖析(四):Tomcat默认连接器(1) 1. Tomcat剖析(一):一个简单的Web服务器 2. Tomcat剖析(二):一个简单的Servlet服务器 3. Tomcat剖析(三): ...

  2. CSharp设计模式读书笔记(23):模板方法模式(学习难度:★★☆☆☆,使用频率:★★★☆☆)

    模板方法模式:定义一个操作中算法的框架,而将一些步骤延迟到子类中.模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模式角色与结构: 实现代码: using System; ...

  3. JavaScript中获取当前项目的绝对路径

    近期在做JavaWeb项目相关的东西,差点儿每天都遇到非常多问题,主要是由于自己对JavaWeb方面的知识不是非常清楚,尽量把自己在项目中遇到的问题都记录下来,方便以后查阅. 在我们的项目中有这种须要 ...

  4. 【百度地图API】如何调整结果面板的样式?如何获取指定页码的结果?

    原文:[百度地图API]如何调整结果面板的样式?如何获取指定页码的结果? 摘要: 1.你是否想自定义查询后,结果面板的显示样式? 2.数据接口每次只返回10条结果,如何取到单独每一页的结果? ---- ...

  5. PHP-微信公众平台开发-接收用户输入消息类型并响应

    原文:PHP-微信公众平台开发-接收用户输入消息类型并响应 <?php // 该代码块用于接收用户消息,根据用户输入的消息类型进行判断,文本,图片,视频,位置,链接,语音等,并取得值,处理后给予 ...

  6. Windows socket之最简单的socket程序

    原文:Windows socket之最简单的socket程序 最简单的服务器的socket程序流程如下(面向连接的TCP连接 ): 1. WSAStartup(); 初始化网络库的使用. 2. soc ...

  7. 给已经编译运行的Apache增加mod_proxy模块的配置方法

    在Linux系统下,需要给已经编译运行的Apache增加mod_proxy模块,可以按照如下方法配置. 具体配置步骤如下: 1. 首先定位到Apache源码的 proxy目录 # cd /root/s ...

  8. 从一道数学题弹程序员的思维:数学题,求证:(a+b%c)%c=(a+b)%c

    在学校论坛看到这道题目,全忘了的感觉. 如果你是高中的,那我觉得你完全没问题.但是,在这个博客园的圈子,觉得全部人都是程(ban)序(zhuan)员(gong)相关的人员,解决这个问题有点难度,毕竟, ...

  9. HDOJ 5063 Operation the Sequence

    注意到查询次数不超过50次,那么能够从查询位置逆回去操作,就能够发现它在最初序列的位置,再逆回去就可以求得当前查询的值,对于一组数据复杂度约为O(50*n). Operation the Sequen ...

  10. 如何使用AdvancedInstaller在安装包中运行一个.bat文件

    原文:如何使用AdvancedInstaller在安装包中运行一个.bat文件 1,  首先要保证你的Files and Folders模块下的Application Folder文件夹下包含你要运行 ...