使用 TCP 在 C# Windows 窗体中共享屏幕:半屏出现故障

问题描述 投票:0回答:1

我正在尝试用 C# 通过 LAN 编写一个非常简单的屏幕共享代码。除了屏幕被切成两半(或者当我切换到其他应用程序时有时会延迟 30%,例如:从查看 VS studio 切换到 Chrome)之外,它似乎运行良好且流畅,有 100 秒的延迟。可能是什么原因?

我已经在我的两台笔记本电脑上尝试过,并尝试在同一台笔记本电脑上共享它,但问题仍然存在。更改分辨率或延迟不会改变任何内容。我还尝试在发送图像时将其保存在本地,然后查看它们,并且它们被完全保存,因此捕获它们的方式不存在问题。我很困惑。

这是正在发生的事情的屏幕截图: 截图1] 截图2

这是我接收发送数据的方式: 接收数据 这是我发送它的方式: 发送数据 任何帮助是极大的赞赏。这是我第一次在这里提问,所以如果格式不符合应有的格式,我深表歉意。

c# tcp windows-forms-designer screensharing
1个回答
0
投票

您应该在发送到服务器或客户端之前压缩字节。 收到后解压

这是我正在使用的代码

static async Task<byte[]> Compress(byte[] data)
{
    using (var compressedStream = new MemoryStream())
    {
        using (var zipStream = new GZipStream(compressedStream, CompressionMode.Compress))
        {
            await zipStream.WriteAsync(data, 0, data.Length);
        }
        return compressedStream.ToArray();
    }
}

private async Task<byte[]> Decompress(byte[] data)
{
    using (var compressedStream = new MemoryStream(data))
    using (var zipStream = new GZipStream(compressedStream, CompressionMode.Decompress))
    using (var resultStream = new MemoryStream())
    {
        await zipStream.CopyToAsync(resultStream);
        return resultStream.ToArray();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.