我必须通过基于XML
格式的自定义协议实现客户端与服务器的通信。这是一个基于TCP
的应用层协议。因此,我的客户端发送请求XML
消息并收到响应,也是XML消息。现在,我考虑如何确保在开始解析之前我收到了整个消息。
我看到两个方法:
将字节接收到某个幻数,表示消息结束。 这是最好的approch(对我而言),是吗?
但是,可能没有神奇的数字和消息的大小是未知的。那个案子怎么样?我看到一些客户端用于其他协议,我看到类似的东西。
while(true){
r = socket.read(buffer, offset, 1024);
if(r < 1024) break;
offset += r;
}
// parse buffer
我不确定是否可以。它假定如果我们读取的字节小于1024字节,则表示已完成。好吗?
有什么建议的解决方法?
答案 0 :(得分:0)
在自定义协议中,您需要包含以下步骤:
<强>客户端强>
服务器强>
读取从客户端
在一个大小等于步骤1中读取的数字的for循环中,开始接收预定义缓冲区大小的内容。
这样服务器就知道实际内容在开始接收XML内容之前有多少字节。