实现java客户端(Android)和C#服务器的协议

时间:2011-05-29 22:47:47

标签: java client-server protocols

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

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

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

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

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

感谢您的时间。

修改

使用Protocol Buffers结束实现此目的:

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

http://code.google.com/p/protobuf-javame/ - 适用于Android端

1 个答案:

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

我希望这有帮助,

此致