我在Android上实现了一个小应用程序,它通过套接字连接字符串发送到服务器(C#)。
目前,我只编码我发送的字符串(安全问题),但现在我需要实现一个协议,在我的应用程序上有其他功能,如“保持活动”消息等。
我们已经定义了procotol,它有一个标题(一个字节序列)和数据(我之前发送的字符串),但因为我不熟悉这个,所以我不知道如何开始实现在Java(客户端)协议上。
您能指出简单协议实施的一些例子吗?我需要读取字节,所以我可以决定客户端从服务器请求的操作类型,反之亦然。
我的第一个尝试是为每个Message类型创建一个类,并按照我需要的方式填充字节,最后每条消息都是一个字节数组。但在我确信这是正确的道路之前,我不想开始挖掘它。
感谢您的时间。
修改
使用Protocol Buffers结束实现此目的:
http://code.google.com/p/protobuf-net/ - 对于c#服务器端
http://code.google.com/p/protobuf-javame/ - 适用于Android端
答案 0 :(得分: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)
}
我希望这有帮助,
此致