如何确保NetworkStream在不关闭Stream或TcpClient的情况下立即发送数据?
我有一个非常简单的代码片段,它试图通过TcpClient
及其相关的NetworkStream
发送数据。
var client = new TcpClient("xxx.xxx.xxx.xxx", 1234); NetworkStream stream = client.GetStream(); byte[] buffer = Encoding.ASCII.GetBytes(str); stream.Write(buffer, 0, buffer.Length);
我发现通常在stream.Write()
之后不会立即发送数据。 如果我添加stream.Close()
client.Close()
或stream.Close()
那么将发送数据。 但是,在我的情况下,我正在尝试等待服务器发送一些ACK消息,所以我想重用原始的NetworkStream
而不关闭TcpClient
或NetworkStream
。 如何才能做到这一点?
将TcpClient.NoDelay
设置为true
以便不使用Nagle的算法 。
从MSDN Library文档:
当NoDelay为
false
,TcpClient不会通过网络发送数据包,直到它收集了大量的传出数据。 由于TCP段中的开销量很大,因此发送少量数据效率很低。 但是,确实存在需要发送非常少量数据或期望从您发送的每个数据包立即响应的情况。 您的决定应权衡网络效率与应用要求的相对重要性。