尽管有文档,但 NetworkStream.Write 似乎并没有等到数据发送完毕。相反,它会等到数据被复制到缓冲区然后返回。该缓冲区在后台传输。
这是我目前拥有的代码。无论我使用 ns.Write 还是 ns.BeginWrite 都没有关系 - 两者都会立即返回。EndWrite 也立即返回(这是有道理的,因为它正在写入发送缓冲区,而不是写入网络)。
bool done;
void SendData(TcpClient tcp, byte[] data)
{
NetworkStream ns = tcp.GetStream();
done = false;
ns.BeginWrite(bytWriteBuffer, 0, data.Length, myWriteCallBack, ns);
while (done == false) Thread.Sleep(10);
}
public void myWriteCallBack(IAsyncResult ar)
{
NetworkStream ns = (NetworkStream)ar.AsyncState;
ns.EndWrite(ar);
done = true;
}
如何判断数据何时实际发送到客户端?
我想在发送我的数据后等待 10 秒(例如)等待来自服务器的响应,否则我会假设有问题。如果发送我的数据需要 15 秒,那么它将始终超时,因为我只能从 NetworkStream.Write 返回时开始计数 - 这是在发送数据之前。我想从数据离开我的网卡开始计算 10 秒。
数据量和发送时间可能会有所不同 - 发送可能需要 1 秒,发送可能需要 10 秒,发送可能需要一分钟。服务器在收到数据后确实会发送响应(它是一个 smtp 服务器),但是如果我的数据格式错误并且响应永远不会到来,我不想永远等待,这就是为什么我需要知道我是否' m 等待发送数据,或者等待服务器响应。
我可能想向用户显示状态 - 我想显示“正在向服务器发送数据”和“等待来自服务器的响应” - 我该怎么做?