远程桌面程序不起作用(WPF C#)

时间:2019-05-07 11:06:09

标签: c# wpf visual-studio xaml remote-desktop

我的问题是这样的: 我已经编写了一个远程桌面程序,该程序应该可以流式传输桌面。并且客户端(通过其流传输其屏幕)已经可以工作,但是服务器(其接收图像)却不能工作! 从理论上讲,图像的传输已经可以工作了(因为它们可以连接并可以看到对方),但是图像却以某种方式无法显示?或更确切地说,它应该接收发送的图像并将其打印在此项目中称为“ StreamoutPut”的图像框中

我尝试做一些类似WPF中视频中显示的操作,而不是Windows Forms中的视频。因此,如果您想更好地了解我想要做什么,请查看以下内容: https://www.youtube.com/watch?v=mRKFdL5eG1I https://www.youtube.com/watch?v=2sCpd1HEMZw

我已经尝试过不使用“ System.Drawing.Image streamoutPut =(Image)binFormatter.Deserialize(mainStream);”更改图像。然后使用“ streanoutput.Source ...”或其他命令,但是出现一个错误,提示图像不能为

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Net.Sockets;
using System.Net;
using System.Runtime.Serialization.Formatters.Binary;
using System.Threading;
using System.Windows.Forms;
using System.Drawing.Imaging;

namespace remoDesk
{
    /// <summary>
    /// Interaktionslogik für Stream.xaml
    /// </summary>
public partial class Stream : Window
{

    private readonly int port;
    private TcpClient client;
    private TcpListener server;
    private NetworkStream mainStream;

    private readonly Thread Listening;
    private readonly Thread GetImage;

    public Stream(int Port)
    {
        port = Port;
        client = new TcpClient();
        Listening = new Thread(StartListening);
        GetImage = new Thread(ReceiveImage);
        InitializeComponent();
    }

    private void StartListening()
    {

        while (client.Connected == false)
        {

            server.Start();
            client = server.AcceptTcpClient();

        }
        GetImage.Start();

    }

    private void StopListening()
    {

        server.Stop();
        client = null;
        if (Listening.IsAlive) Listening.Abort();
        if (GetImage.IsAlive) GetImage.Abort();

    }

    private void ReceiveImage()
    {

        BinaryFormatter binFormatter = new BinaryFormatter();
        while (client.Connected)
        {

            mainStream = client.GetStream();
            System.Drawing.Image StreamoutPut = (Image)binFormatter.Deserialize(mainStream);

        }

    }

    private void DisconnectBTN_Click(object sender, RoutedEventArgs e)
    {

        StopListening();

    }

    private void ConnectBTN_Click(object sender, RoutedEventArgs e)
    {

        try
        {

            server = new TcpListener(IPAddress.Any, port);
            Listening.Start();

        }
        catch
        {

            //can't start the stream 2 times

        }
    }

}

}`

0 个答案:

没有答案