2011-05-29 154 views
1

我在Android上实现了一个通过套接字连接字符串发送到服务器(C#)的小型应用程序。为Android客户端(Android)和C#服务器实现协议

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

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

你能指出一些简单协议实现的例子吗?我需要读取字节,所以我可以决定客户端从服务器请求的操作类型,以及其他方式。

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

谢谢你的时间。

编辑

端使用Protocol Buffers实现这一点:

http://code.google.com/p/protobuf-net/ - 为C#服务器端

http://code.google.com/p/protobuf-javame/ - 为Android侧

回答

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) 
} 

我希望这有助于

问候,