2012-03-01 25 views
0

我正在构建客户端/服务器媒体应用程序供个人使用。该应用程序可以工作,但每个连接有两个套接字:一个用于服务器/客户端命令和通信(只是来回发送JSON字符串;另一个用于发送序列化介质。时尚,我知道哪些数据是什么,或者是它更好地只是离开他们,因为他们是如何实现多用途套接字协议?

回答

2

您需要定义结构以您的邮件使用一个套接字同时例如:?

Message format: 
    Command,DataLen,Data 

Example messages: 
    JSON,20,{ "text": "Hello!" } 

    CMD1:9:Some Data 

这是使用逗号将数据长度与命令分开的“基于文本”格式,您可以使用一个二进制格式(这可能更容易解析和更强大),例如:

CommandLen(4-bytes):Command:DataLen(4-bytes):Data 
+0

@EvanTeran,brettw这是如何支持原始二进制流?据我所知,没有办法将原始二进制文件放入JSON字符串中。很明显,我可以发送一条JSON消息,说'嗨,客户希望xxx二进制数据',但是这不能解决消息/二进制数据同步问题。 – AedonEtLIRA 2012-03-01 17:57:06

+1

如果我通过JSON编码发送二进制数据,我可能会使用base64编码。它很简单,并且数据大小膨胀相对较小。 – 2012-03-01 18:11:45

+0

@EvanTeran感谢您的建议。我做了一个简单的Arrays.toString(byte []),然后再返回基准,并将其与Base64进行比较。你赢了。再次感谢,我不知道Bas64的史诗味道。 – AedonEtLIRA 2012-03-01 18:54:53