С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
 Аватар для Jesterru
3 / 2 / 2
Регистрация: 19.06.2016
Сообщений: 299

Пересылка скриншота по сети

26.07.2017, 14:21. Показов 1656. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу сделать программу для удаленного управления за моим рабочим столом, для этого я должен сделать скрииншот и отправить его по сокету. Но у меня возникла проблема.
Код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
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? Заранее благодарен за помощь

Добавлено через 6 минут
У меня был вариант конвертировать _BitMap в строку, отправлять, но как эту строку обратно в Bitmap конвертировать, я не знаю
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.07.2017, 14:21
Ответы с готовыми решениями:

Пересылка данных по сети
Здравствуйте! В приложении я пересылаю данные по сети. Отсылаю сколько передано данных, а потом, например, собственно строку. Но число...

Пересылка сообщений по сети
Доброй всем ночи. Я пишу на C# не так давно, и захотел написать приложение которое работало бы всети, но не знаю как начать. Кто-нибудь...

Пересылка QPixmap по сети
Есть у меня задача переслать изображение по сети. Создаю клиент-серверное приложение. Реализация функции на сервере, void...

4
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
26.07.2017, 14:49
Цитата Сообщение от Jesterru Посмотреть сообщение
Проблема заключается в том, что я не могу отправить _BitMap.
почему не можешь то? что на передаче байтов то говорит? или что у получателя?
0
Строитель
 Аватар для Nord790
889 / 556 / 194
Регистрация: 01.04.2014
Сообщений: 610
Записей в блоге: 6
26.07.2017, 14:51
глянь Jesterru
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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( "Не удалось получить скриншот." );
            }
        }
    }
}
1
 Аватар для Jesterru
3 / 2 / 2
Регистрация: 19.06.2016
Сообщений: 299
26.07.2017, 15:35  [ТС]
Цитата Сообщение от SeIZVeIZ Посмотреть сообщение
почему не можешь то? что на передаче байтов то говорит? или что у получателя?
Ты попробуй код в вижак вставить, увидишь, почему

Добавлено через 26 секунд
Nord790, Спасибо, сейчас попробую под себя этот код перестроить

Добавлено через 32 минуты
Nord790, Спасибо за пример, но у меня на выходе выходит просто черное изображение

Добавлено через 15 секунд
Nord790, Спасибо за пример, но у меня на выходе выходит просто черное изображение
0
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
26.07.2017, 15:38
Цитата Сообщение от Jesterru Посмотреть сообщение
Ты попробуй код в вижак вставить, увидишь, почему
для того чтобы "попробовать" Ваш код, нужно еще дописывать. А времени писать этого нет.
Конвертировать картинку через класс кодировки это просто отпад... у System.Drawing есть класс ImageConverter его и используй для конвертации картинки в байты. Ну или через stream как написали выше.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.07.2017, 15:38
Помогаю со студенческими работами здесь

Пересылка файла по сети.Установка обработчика сетевых ошибок
Привет всем!!! Помогите пожалуйста бедному студенту. Нужно немного изменить две программы. Эти программы уже сдавал другой студент, поэтому...

Передача скриншота
Мне нужно сделать скриншот экрана и отправить его на сервер не сохраняя на компе. скриншот делаю так: bmp:=Tbitmap.Create; ...

Сохранение скриншота
Подскажите как сохранять скриншот с именем которого в папке нет. Например, в папке есть фото. 1.bmp как сохранить следующее фото с...

Создание скриншота.
Приветствую. такой вопрос как создать скриншот в игре? Интересует способ с PrintScreen. то есть из буфера скриншот вытащить... и...

Сохранение скриншота
Нужно делать скриншот с камеры и сохранять его. Сделал следующим образом: void CaptScreen(Camera Cam) { RenderTexture RT =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru