【发布时间】:2019-03-04 11:47:17
【问题描述】:
我有一个客户端-服务器场景,客户端每秒向服务器发送图像。我不想每次发送图像以表示流结束时都关闭连接。我想保持网络流打开以减少重新建立连接的开销。如何发出图像流结束的信号?
我尝试在发送图像字节后使用NetworkStream.Flush(),然后发送一个ASCII编码的字符串来表示图像的结束,但是,根据微软的文档,NetworkStream.Flush() 方法无效“因为 NetworkStream 没有缓冲,它对网络流没有影响”。
我该如何解决这个问题?
客户:
client.Connect(_host, _port);
Console.WriteLine("Connected");
using (NetworkStream stream = client.GetStream())
{
while (_isRunning && client.Connected)
{
byte[] buffer = CaptureScreen();
Console.WriteLine("Sending {0} bytes", buffer.Length);
stream.Write(buffer, 0, buffer.Length);
Thread.Sleep(1000);
}
}
服务器:
using (NetworkStream stream = client.GetStream())
{
while (_isRunning && client.Connected)
{
byte[] buffer = new byte[16384];
using (MemoryStream memoryStream = new MemoryStream())
{
int bytesRead;
while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0)
{
_form.ConsoleWriteLine($"Received {bytesRead} bytes");
// TODO: If end of image stream break from read loop
memoryStream.Write(buffer, 0, bytesRead);
}
Image image = Image.FromStream(memoryStream);
_form.UpdateImage(image);
}
}
}
【问题讨论】:
标签: c#