我正在使用.NET创建一个客户端 - 服务器应用程序,但现在我遇到的问题是我尝试发送一些内容,客户端正在阅读它,而在阅读时我正在发送其他内容,因此它会使发送的内容变为废话数据
示例:
有没有办法解决这个问题?现在我在发送后正在做Thread.Sleep(10)
,但我认为还有更好的方法:P。
P.S。我使用的是NetworkStream.Write()/Read()
,而不是NetworkStream.BeginWrite()/BeginRead()
。这两个中哪一个更好,为什么?
答案 0 :(得分:1)
问题可能是您使用相同的套接字发送多个“事物”的数据。您可能知道您已经发送了一个字符串,然后发送了一个图像,但是,TCP没有看到单独的对象,只看到一个字节流。
您也无法知道为获取“第一个”数据对象需要进行多少次读取调用。描述多个对象超出了TCP的范围。关键是,通过每个事务使用一个单个套接字可以最好地解决此问题。创建一个套接字,在一次写入调用中将整个数据写入其中,然后关闭套接字。让客户端读取,直到您拥有完整的数据。如果您需要发送其他内容,请创建一个新套接字。
我知道这不是特定于NetworkStream类的,但我希望它有所帮助。
答案 1 :(得分:0)
你应该考虑使用带有nettcpbinding的WCF来处理这种事情,特别是如果两端(客户端/服务器)都在C#中。
我之前在编写自定义tcp代码时遇到了类似的问题,但转移到wcf并且它更加容易,而且更加稳定,因此您可以专注于编写应用程序代码。
答案 2 :(得分:0)
如果我是你,我会在发送和接收数据时创建规则。至于说你有一个像$这样的起始字符,而*是结束字符。这将有助于您的客户端/服务器系统知道何时读取或何时写入,并最终避免在此过程中出现垃圾。 所以在步骤方面:
然后再说一遍,也许你正在做的代码示例可以帮助我们确切地指出你做错了什么。