0

全部,

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

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

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

这些对象的大小是可变的,所以我想我不能使用 MemoryStream 的 Position 属性。有没有办法在字节数组中检测对象开始的地方?

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

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

4

1 回答 1

0

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

令人担忧的是,服务器处理速度不够快,无法跟上写入的速度;您可能想考虑优化它。

于 2012-05-15T21:01:05.280 回答