我编写了一个客户端 - 服务器应用程序。我有一些数据结构,我想通过网络从客户端发送到服务器。我将它们呈现为确定大小的字节数组。服务器和客户端都知道这种结构。
我的目标是发送一组结构并等待服务器确认它们已被接收并妥善保存在其一侧..
我的想法是创建一个简单的代码。
客户方:
服务器端:
问题是在服务器端我无法确定客户端发送的数据组的结束。
如何做我想要的所有怀疑?
答案 0 :(得分:2)
对我来说,问题是Flush()
没有做任何事情 - 这实际上是NetworkStream.Flush()
的记录行为:
Flush方法实现了Stream.Flush方法;但是,由于NetworkStream没有缓冲,因此对网络流没有影响。调用Flush方法不会抛出异常。
绕过这个;我会将您的套接字配置为立即发送 (将NoDelay
设置为true
),然后为了避免数据包大小问题,我会将NetworkStream
包装在一个BufferedStream
(注意单个缓冲流仅适用于 读取或写入,但不能同时写入两者)。然后:
BufferedStream
BufferedStream
这将允许发送消息的结尾而不会卡在输出缓冲区中,并且不需要您关闭流。
答案 1 :(得分:0)
编辑:OP现在添加了他需要使用.NET 3.0之前的评论条件。
如果连接的两端都是.NET,WCF应该拥有控制数据传输所需的所有工具。
更具体地说,看看
此外,如果您需要切换到异步数据传输,则可以更改为queued transport like MSMQ。
答案 2 :(得分:0)
答案 3 :(得分:0)
我使用.Net Remoting来执行数据传输任务。所以,问题解决了(如果没有其他人会出现:))