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