目前我使用的是以下代码。无论是使用 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服务器),但如果我的数据格式错误且响应永远不会到达,则不想永远等待,这就是为什么我需要知道是否在等待数据被发送,还是在等待服务器响应。
我可能想向用户显示状态-我想显示“正在将数据发送到服务器”和“正在等待服务器响应”,我该怎么做?