gpt4 book ai didi

c# - NetworkStream.Write 异步问题

转载 作者:太空宇宙 更新时间:2023-11-03 21:50:25 25 4
gpt4 key购买 nike

我在用 C# 写入 NetworkStream 时遇到问题。从 MSDN 我读到:

The Write method blocks until the requested number of bytes is sent or a SocketException is thrown

嗯 - 在我的例子中,它的行为就像一个异步方法。线程未被阻塞。

这里有一个代码示例,可以稍微启发一下情况:

TcpClient tcpcl = new TcpClient("192.168.1.128", 1337);
NetworkStream netst = tcpcl.GetStream();
byte[] will_send = File.ReadAllBytes(@"large_file_120_MB.mp4");
Console.WriteLine("Starting transmission...");
netst.Write(will_send, 0, will_send.Length);
Console.WriteLine("File has been sent !");
(... later instructions ...)

执行 1 秒后控制台的结果:

开始传输...

文件已发送!

第二条消息立即显示。后面的指令正在执行中。

与此同时,服务器仍会收到文件,并且在其端一切正常。它变得更好 - 如果我终止发送程序,在传输过程中,接收不会停止。 Degugger 清楚地显示应用程序已完全结束。然而,仍然会传输几兆字节,直到接收完全停止。

所以我的问题 - 有没有办法阻塞主线程,直到 Write 方法完成?

最佳答案

MSDN 描述应该更好地理解为

The Write method blocks until the requested number of bytes is written to the local network buffer or a SocketException is thrown

即在另一端成功接收到整个文件之前,写入将返回。

这也意味着当您关闭您的应用程序时,当前在网络缓冲区中的任何内容都可能会继续发送。

在整个文件被成功接收之前阻塞主线程的唯一方法是潜在地使用异步套接字,一旦发送完成,等待接收端发送某种确认,你必须实现.

关于c# - NetworkStream.Write 异步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14839245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com