Пересылка скриншота по сети - C#
Формулировка задачи:
Хочу сделать программу для удаленного управления за моим рабочим столом, для этого я должен сделать скрииншот и отправить его по сокету. Но у меня возникла проблема.
Код:
Проблема заключается в том, что я не могу отправить _BitMap.
Как это сделать? И как на другом конце сокета можно принять эти данные и конвертировать в Bitmap? Заранее благодарен за помощь
Socket _ClientS = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); _ClientS.Connect(_IpEndP); Console.WriteLine("Нажмите на любую клавишу, что бы сделать скриншот..."); Console.ReadKey(); Bitmap _BitMap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppRgb); using (Graphics _Gr = Graphics.FromImage(_BitMap)) { _Gr.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy); } byte[] _Data = Encoding.Default.GetBytes(_BitMap); _ClientS.Send(_Data); _ClientS.Shutdown(SocketShutdown.Both); _ClientS.Close();
У меня был вариант конвертировать _BitMap в строку, отправлять, но как эту строку обратно в Bitmap конвертировать, я не знаю
Решение задачи: «Пересылка скриншота по сети»
textual
Листинг программы
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Project { public partial class MainWindow : Form { public MainWindow() { InitializeComponent(); } private void MainWindow_Load(object sender, EventArgs e) { // сервер new Action( () => { var Listener = new System.Net.Sockets.Socket( System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp ); Listener.Bind( new System.Net.IPEndPoint( System.Net.IPAddress.Any, 440 ) ); Listener.Listen( 20 ); while (true) new Action<System.Net.Sockets.Socket>( Client_Listen ).BeginInvoke( Listener.Accept(), null, null ); } ).BeginInvoke( null, null ); } private void Client_Listen(System.Net.Sockets.Socket Socket) { try { // прослушивание var Stream = new System.Net.Sockets.NetworkStream( Socket ); var Output = new System.IO.BinaryWriter( Stream ); byte[] bytes = new byte[] { }; bytes = ConvertImageToBytes( GetScreenshot() ); // преобразуем скриншот в байты Output.Write( bytes.Length ); // отправляем размер Output.Write( bytes ); // отправляем байты //... } finally { Socket.Close(); // закрываем соединение GC.Collect(); // очищаем мусор } } public Bitmap GetScreenshot() { var Bitmap = new System.Drawing.Bitmap( SystemInformation.VirtualScreen.Width, SystemInformation.VirtualScreen.Height ); using (var gc = Graphics.FromImage( Bitmap )) { gc.CopyFromScreen( new Point(), new Point(), Bitmap.Size ); } return Bitmap; } public byte[] ConvertImageToBytes(System.Drawing.Bitmap bitmap) { using (var mstream = new System.IO.MemoryStream()) { bitmap.Save( mstream, System.Drawing.Imaging.ImageFormat.Bmp ); return mstream.ToArray(); } } private async void btn_Receive_Click(object sender, EventArgs e) { var Socket = new System.Net.Sockets.Socket( System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp ); var rslt = await Task.Factory.StartNew<bool>( () => { try { Socket.Connect("localhost", 440); return true; } catch { return false; } } ); if (!rslt) { MessageBox.Show("Не удалось подключиться к серверу"); } try { var Stream = new System.Net.Sockets.NetworkStream( Socket ); var Input = new System.IO.BinaryReader( Stream ); int length = await Task.Factory.StartNew<int>( () => { return Input.ReadInt32(); } ); byte[] bytes = await Task.Factory.StartNew<byte[]>( () => { return Input.ReadBytes( length ); } ); pictureBox_Screenshot.Image = Bitmap.FromStream( new System.IO.MemoryStream( bytes ) ); MessageBox.Show( "OK" ); } catch { MessageBox.Show( "Не удалось получить скриншот." ); } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д