2009-10-08 99 views
0

将消息格式化为服务器的最佳方式是什么?当我使用二进制格式化器对一个对象进行serilising然后将其发送到服务器时。通过套接字发送序列化对象

在服务器结束其在收听一个异步方式,然后当收到的缓冲区大小是不是100%它假定传输已经完成。

这是工作的那一刻,我可以在另一端deserialise对象,我只是担心,如果我开始发送异步此方法将失败,有消息的可能模糊。

我知道,我需要以某种方式将邮件标记为说这是一个消息的最后,这等位属于消息2,但我不能确定正确的方法来做到这一点。

任何人都可以指出我在正确的方向,也许给我一些例子?

感谢

回答

2

你总是可以把它序列化到内存流,看看它到底有多大,发送长度为4个字节的二进制数,然后发送流的内容。

在另一边你可以坐等4个字节,将它们组合成一个整数,然后坐下来,等待的字节数。

当你读的函数返回(使其阻塞读),你知道你有整个对象到一个缓冲区,所以你只要反序列化,并将其转换为您共同的接口类型。

编辑:这是你的具体问题的答案。这就是说你最好使用比纯粹的tcp更高级别的库。

+0

我使用套接字的原因是因为需要检测客户端何时断开连接。 – RubbleFord 2009-10-08 08:04:36

+0

在这种情况下,在发送数据包之前发送“数据包”大小,这总会大大简化事情。机会是你甚至不会感觉到,你的对象的大小是4字节吗? – Blindy 2009-10-08 11:07:06

1
  1. 如果你的对象有可以接受的另一端字节的规定量,然后创建你的对象固定长度。
  2. 否则,您可以在对象之间发送分隔符(符号或您在对象中未使用的符号序列),并逐字节地继续读取接收到的数据,直到看到分隔符为止。
+0

对象不固定长度我不能使用选项1,因为它是通过二进制格式化程序的选项,我不确定什么是安全分隔符。 – RubbleFord 2009-10-08 07:48:32

相关问题