从异步套接字反序列化多个对象

时间:2012-05-15 20:00:08

标签: sockets object asynchronous deserialization

所有

我是C#和套接字编程的新手,我需要一些建议。我一直在寻找这个网站和类似的网站,但还没有真正找到解决我的问题的方法。

我正在开发一个客户端应用程序和一个服务器应用程序,两者正在通过异步套接字进行通信。客户端通过使用BinaryFormatter将对象序列化到MemoryStream,一次一个地向服务器发送对象。生成的字节数组通过套接字发送并由服务器反序列化。

当服务器有时间在客户端发送新对象之前接收和处理对象时,这很有效。但是,当客户端发送的对象比服务器可以处理的速度快时,它们会在服务器端排队。下一个EndReceive()调用从套接字中读取所有排队的对象,但序列化程序只反序列化第一个对象而其他对象丢失。

对象的大小可变,所以我想我不能使用MemoryStream的Position属性。有没有办法在字节数组中检测对象的起始位置?

另外,我在其他帖子中读到,EndReceive()可能无法接收在一次读取中发送的所有内容,可能需要其他读取。所以我猜这是我必须处理的其他事情?

任何指针?任何帮助将不胜感激。 : - )

1 个答案:

答案 0 :(得分:0)

您可以阅读尽可能多的内容并将其“排队”以进行处理,以便套接字不会排队。您可以让服务器接收数据,只需读取数据并将数据发送到消息队列中进行异步处理。

关于服务器无法快速处理以跟上写入的问题;你可能想要考虑优化它。