C#实现循环发送电脑屏幕截图

本文实例为大家分享了C#实现循环发送电脑屏幕截图的具体代码,供大家参考,具体内容如下

写的一个demo,建立Socket连接之后,循环发送电脑屏幕截图

服务器端开启之后监听端口号2000,为新建连接创建新的Socket。之后从客户端接收截图,判断一张图片接收结束之后。将图片显示于pictureBox控件上。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace server
{
    public partial class Form1 : Form
    {
        public Thread mythread;
        public int shu = 0;
        public Form1()
        {
            InitializeComponent();
          //  CheckForIllegalCrossThreadCalls = false; 不需要
        }

        public Socket nect(int port, string host)
        {
            IPAddress ip = IPAddress.Parse(host);
            IPEndPoint ipe = new IPEndPoint(ip, port);
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket类
            s.Bind(ipe);//绑定2000端口
            s.Listen(0);//开始监听
            Socket temp = s.Accept();//为新建连接创建新的Socket。
            return temp;
        }
        public void look(object s)
        {
        Socket temp = (Socket)s;
        byte[] buffer = new byte[1024];
        while (true)
        {
            try
            {
                MemoryStream ms = new MemoryStream();
                // Thread.Sleep(1000);
                int end = 1;
                while (end != 0)
                {
                    shu = temp.Receive(buffer, buffer.Length, 0);//从客户端接受信息
                    if (shu == 5)
                        end = 0;
                    else
                        ms.Write(buffer, 0, 1024);
                }
                pictureBox1.Image = Bitmap.FromStream(ms);
                ms.Dispose();
            }
            catch(System.ArgumentException  e)
            {

            }
        }
        }
        //开启
        private void button1_Click(object sender, EventArgs e)
        {
            int port = 2000;
            string host = "127.0.0.1";
            Socket temp = nect(port, host);

            mythread = new Thread(new ParameterizedThreadStart(look));
            mythread.Start(temp);

        }

    }
}

客户端连接到服务器后,获取屏幕截图之后,设置图片的大小和清晰度,并循环发送截图。

using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Drawing;
using System.Windows.Forms;
using System.CodeDom;
using System.Drawing.Imaging;
using System.Drawing.Design;
using System.Text;
using System.Threading;

namespace client
{
    class Program
    {
        static void Main(string[] args)
        {
            int port = 2000;
            string host = "127.0.0.1";
            Socket c=connect(port, host);

            Bitmap bt = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
            Graphics g= Graphics.FromImage(bt);
            while(true)//循环发送截图
            {

            MemoryStream ms = new MemoryStream();
            g.CopyFromScreen(new Point(0, 0), new Point(0, 0), Screen.PrimaryScreen.Bounds.Size);//获取屏幕截图
            Image mm = SaveJpg(bt,10);//设置图片清晰度
            mm = GetWebImage(mm,360,240);//改变截屏图片大小
            mm.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

            byte[] buffer = new byte[1024];
            ms.Position = 0;  

            int end = 1;
            while (end != 0)
            {
                end= ms.Read(buffer, 0, 1024);//end为零表示读取完毕
                c.Send(buffer, buffer.Length, 0);//每次发送1024个字节
            }
            string sendStr = "over!";//结束信息
            byte[] bs = Encoding.ASCII.GetBytes(sendStr);
            c.Send(bs, bs.Length, 0);//发送测试信息
            ms.Dispose();
            }
            c.Close();
            Console.ReadLine();
        }
        public static Socket connect(int port, string host)
        {
            IPAddress ip = IPAddress.Parse(host);
            IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndPoint实例
            Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket
            Console.WriteLine("Conneting...");
            try
            {

                c.Connect(ipe);//连接到服务器
                return c;
            }
            catch
            {
                Thread.Sleep(1000);
                connect(port, host);
                return c;

            }

        }
        public static Image SaveJpg(Image image, long value)//设置图像质量1—100
        {
            ImageCodecInfo icInfo = null;
            ImageCodecInfo[] infos = ImageCodecInfo.GetImageEncoders();
            foreach (ImageCodecInfo info in infos)
            {
                if (info.MimeType == "image/jpeg")
                {
                    icInfo = info;
                    break;
                }
            }
            EncoderParameters ep = new EncoderParameters(2);
            ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, value);//质量,定义图片的清晰度
            ep.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionLZW);//压缩,似乎无效果
            return image;
        }
        public static Image GetWebImage(Image img, int p_Width, int p_Height)//改变图片大小
        {
            Bitmap _Bitmap = new Bitmap(p_Width, p_Height);
            Graphics _Graphcis = Graphics.FromImage(_Bitmap);
            _Graphcis.DrawImage(img, 0, 0, p_Width, p_Height);
            _Graphcis.Dispose();
            return _Bitmap;
        }

    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C#获取Windows10屏幕缩放比例的操作方法

    现在1920x1080以上分辨率的高分屏电脑渐渐普及了.我们会在Windows的显示设置里看到缩放比例的设置.在Windows桌面客户端的开发中,有时会想要精确计算窗口的面积或位置.然而在默认情况下,无论WinForms的Screen.Bounds.Width属性还是WPF中SystemParameters.PrimaryScreenWidth属性,以下图举例,将会返回除以150%的数值1280.而不是真实的物理分辨率1920. 接下来介绍如何获取Display resolution中显示的实际

  • C#实现循环发送电脑屏幕截图

    本文实例为大家分享了C#实现循环发送电脑屏幕截图的具体代码,供大家参考,具体内容如下 写的一个demo,建立Socket连接之后,循环发送电脑屏幕截图 服务器端开启之后监听端口号2000,为新建连接创建新的Socket.之后从客户端接收截图,判断一张图片接收结束之后.将图片显示于pictureBox控件上. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;

  • Python实现用手机监控远程控制电脑的方法

    一.前言 很多时候,我们都有远程控制电脑的需求.比如正在下载某样东西,需要让电脑在下载完后关机.或者你需要监控一个程序的运行状况等. 今天我们就来用Python实现一个远程监控并控制电脑的小程序. 二.实现原理 听起来远程控制电脑好像很高级的样子,但是实现起来其实非常简单.实现原理如下: 运行程序,让程序不停地读取邮件 用手机给电脑发送邮件 判断是否读取到指定主题的邮件,如果有,则获取邮件内容 根据邮件内容,执行预设的函数 与其说是学习如何远程控制电脑,还不如说是学习如何读取邮件.当然,上面的的

  • php模拟socket一次连接,多次发送数据的实现代码

    复制代码 代码如下: <?php //post.php function Post($host,$port) { //$host="127.0.0.1"; //建立连接 $conn = fsockopen($host,$port); if (!$conn) { die("Con error"); } //循环发送5次数据 // for($i = 0;$i<5;$i++) { $data="user_name=admin".$i; Wr

  • python实现定时发送qq消息

    因为生活中老是忘记各种事情,刚好又在学python,便突发奇想通过python实现提醒任务的功能(尽管TIM有定时功能),也可定时给好友.群.讨论组发送qq消息.其工作流程是:访问数据库提取最近计划-->根据数据内容(提醒时间.提醒对象.提醒内容)设置定时任务-->给特定qq好友发送消息. 1. 软件版本: 2.安装依赖环境 pymysql安装:pip install pymysql qqbot安装:pip install qqbot 3.数据库操作 数据库操作非常简单,跟Java类似,自己去

  • PHP使用gearman进行异步的邮件或短信发送操作详解

    本文实例讲述了PHP使用gearman进行异步的邮件或短信发送操作.分享给大家供大家参考,具体如下: 一.准备工作 1.为了防止,处理业务途中出现的宕机,请配置好gearman的持久化方式. 2.使用gearmanManager来管理我们的worker脚本,方便测试. 上述两条请看我之前写的两篇文章 二.编写测试脚本 sendEmail.php代码如下: <?php //注意函数名与文件名相同 function sendEmail($job) { $workId = uniqid(); //wo

  • 使用JAVA通过ARP欺骗类似P2P终结者实现数据封包监听

    如果说最近有什么不爽的事情,那就是与人共享网络的痛苦了,特别是当其他共享者使用那些P2P工具下载软件,而你却看着网页进度条一点点爬的时候,那种痛苦对于我这种网虫级别的人来说,那简直就是痛不欲生.绝对不能再忍了,于是乎上网下载P2P终结者,哼,你们不仁我则不义,看谁厉害.软件下好后,立刻启动监控,然后尝试了下速度,哇,那个爽啊.可惜好景不长,没多久对方就跑来问我为什么他们断网了?我楞了一下,那垃圾软件居然连对方的网都断了,于是支支唔唔的应付了他,说我看下,总算勉强过关,还好他们不懂电脑,不然就掉大

  • 最基础的Python的socket编程入门教程

    本文介绍使用Python进行Socket网络编程,假设读者已经具备了基本的网络编程知识和Python的基本语法知识,本文中的代码如果没有说明则都是运行在Python 3.4下. Python的socket功能封装在socket库中,要使用socket,记得先import socket,socket库的详细介绍参见官方文档. 创建Socket 首先创建一个socket,使用socket库中得socket函数创建. import socket # create an INET, STREAM soc

  • Python制作简易聊天器,搭建UDP网络通信模型

    目录 1.导入模块 2.创建一个套接字对象 3.发送数据到ubuntu系统中 4.发送任意数据给网络条数助手 5.循环发送数据 6.循环接受数据 循环接收 将相关的功能抽离出来做成一个函数 7.启动 最后运行代码 前言: 互联网的本质是什么?其实就是信息的交换.就比如我们常用的QQ.微信等.那么如何将自己的信息发送到其他人的电脑上呢? 那就需要借助网络模型来完成这样的事情了.今天就带领大家使用UDP网络模型来完成一个简单的聊天器 分享内容: python中的套接字实现 如何与Ubuntu建立通信

  • Python八个自动化办公的技巧

    目录 导语 1.Word文档doc转docx 1.1 导入工具包 1.2 获取文件夹下面所有doc文件明细 1.3 转换文件 2.文字地址批量转经纬度 2.1 导入工具包 2.2 定义转换函数 2.3 地址转换 3.经纬度计算距离 3.1 导入工具包 3.2 读取数据 3.3 计算距离 4.百度经纬度转高德经纬度 4.1 工具包 4.2 定义函数 4.3 单个转换 4.4 批量转换 5.Excel文件批量合并 5.1 工具包 5.2 获取文件列表 5.3 转换存储数据 6.Word文件批量转pd

  • vue axios同步请求解决方案

    在vue项目里面,需要循环发送ajax请求,出现的问题就是循环结束,第一次服务器还没返回,导致数据处理错误,需要使用同步请求 解决方案 目前没有发现axios可以同步请求,所以只能使用jQuery,配置同步请求: $.ajax({ url:'/comm/test1.php', type:'POST', //GET async:false, //或false,是否异步 data:{ name:'yang',age:25 }, timeout:5000, //超时时间 dataType:'json'

随机推荐