桌面简单查看器

本文关键字:简单 桌面 | 更新日期: 2023-09-27 18:25:35

为了开发一个应用程序远程桌面WP7,我开始使用桌面简单查看器,它可以工作,但没有显示我在服务器端所做的所有操作的问题,即YouTube中的视频可以向您显示我的问题http://www.youtube.com/watch?v=3q-烟YsPQ&feature=youtu.be

我使用套接字连接,并对我的数据(图像)进行解码和编码。

这是我在WP7客户端中的代码

    void Conncet(string IP_Address)
    {
        client_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs()
        {
            RemoteEndPoint = new IPEndPoint(IPAddress.Parse(IP_Address), 4532)
        };
        socketEventArg.Completed += OnConncetCompleted;
        client_socket.ConnectAsync(socketEventArg);
    }
    void StartReceiving()
    {
            byte[] response = new byte[131072];
            SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
            socketEventArg.Completed += OnReceiveCompleted;
            socketEventArg.SetBuffer(response, 0, response.Length);
            client_socket.ReceiveAsync(socketEventArg);
    }
    private void ViewReceivedImage(byte[] buffer)
    {
        try
        {
            MemoryStream ms = new MemoryStream(buffer);
            BitmapImage bi = new BitmapImage();
            bi.SetSource(ms);
            MyImage.Source = bi;
            ms.Close();
        }
        catch (Exception) { }
        finally
        {
            StartReceiving();
        }
    }

这是我在服务器端(PC)发送图像的代码。

  void StartSending()
    {
        while (!stop)
            try
            {
                Image oldimage = scr.Get_Resized_Image(wToCompare, hToCompare, scr.GetDesktopBitmapBytes());
                //Thread.Sleep(1);
                Image newimage = scr.Get_Resized_Image(wToCompare, hToCompare, scr.GetDesktopBitmapBytes());
                byte[] buffer = scr.GetDesktop_ResizedBytes(wToSend, hToSend);
                float difference = scr.difference(newimage, oldimage);

                if (difference >= 1)
                {
                    SenderSocket.Send(buffer);
                }

            }
            catch (Exception) { }
    }

我的问题是如何使发送和接收快速显示电脑屏幕在WP7实时+/-。

桌面简单查看器

您必须找到瓶颈并加快速度。可能是网络运行速度不够快。使用压缩可能就是答案。

这可能是因为WP7机器不够快,无法显示图像。发送部分屏幕图像或较低分辨率可能是一个解决方案。

这可能是因为windows机器抓取图像的速度不够快。四处传播一些代码可能是解决方案。使用部分更新也会有所帮助。

我会选择一种解决方案,即每次更新我只发送一个角(左上角、右上角、左下角、右下角),因此整个堆栈必须发送/接收较小的数据块。

请注意,模拟器可能会增加/减少一些开销,并显示出不真实的性能。所以不要优化模拟器的代码(太多)

我猜您的带宽快用完了。

如果你问我,从带宽角度来看,发送完整的未压缩图像是一个糟糕的想法。单个RGB32800x480图像的大小约为1.15兆欧,因此要维持15 FPS的帧速率,您需要138兆比特/秒的连接。

我建议,在服务器端,只发送已更改的矩形,然后压缩发送。已经做到这一点的一个协议是RFB协议,最著名的是在VNC中使用。