【问题标题】:Implement protocol for java client (Android) and C# server为 java 客户端 (Android) 和 C# 服务器实现协议
【发布时间】:2011-05-29 22:47:47
【问题描述】:

我在 Android 上实现了一个小应用程序,它通过套接字连接字符串发送到服务器 (C#)。

目前,我只对我发送的字符串进行编码(安全问题),但现在我需要实现一个协议,以便在我的应用上拥有其他功能,例如“保持活动”消息等。

协议已经被我们定义好了,它有一个头(一个字节序列)和数据(我之前发送的字符串),但是因为我不熟悉这个我不知道如何开始实现在 Java(客户端)协议上。

您能否指出一些简单协议实现的示例?我需要读取字节,所以我可以决定客户端向服务器请求什么类型的操作,反之亦然。

我的第一次尝试是为每种消息类型创建一个类,并按照我需要的方式填充字节,最后每条消息都是一个字节数组。但在确定这是正确的道路之前,我不想开始深入研究。

感谢您的宝贵时间。

编辑

结束使用 Protocol Buffers 来实现:

http://code.google.com/p/protobuf-net/ - 用于 c# 服务器端

http://code.google.com/p/protobuf-javame/ - 安卓端

【问题讨论】:

    标签: java client-server protocols


    【解决方案1】:

    前段时间我也遇到过同样的问题。如果您有足够的带宽,那么我建议您使用 XML 和 XML 流,这两种技术非常适合所有平台和所有语言。但是,如果您的带宽不足,那么是的,您可以使用二进制文件。 这是我常用的设计:

    class AbstractMessage{
     byte[] data;
     void GenerateHeader(){
            // this method generates the message header
     }
     // Use this method to translate your 
     // business domain message into a byte array that will go    through the network
     void abstract byte[] ToByteArray(AbstractMessage);
     // Translate received data from network to a business domain message
     void abstract AbstractMessage ParseMessage(byte[] receivedData) 
    }
    
    // And then you can have your messages
    class MyMessage extends AbstractMessage{
     // In this subclass, you can define how a 
     // MyMessage object is translated into a byte array 
     // and vice versa (using ToByteArray and ParseMessage methods)
    }
    

    希望对你有帮助,

    问候,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      • 2010-10-01
      • 2014-07-27
      相关资源
      最近更新 更多