C# 建立Socket连接 持续发送屏幕截图
2017-10-06 10:52
316 查看
写的一个demo,建立Socket连接之后,循环发送电脑屏幕截图
服务器端开启之后监听端口号2000,为新建连接创建新的Socket。之后从客户端接收截图,判断一张图片接收结束之后。将图片显示于pictureBox控件上。
客户端连接到服务器后,获取屏幕截图之后,设置图片的大小和清晰度,并循环发送截图。
服务器端开启之后监听端口号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; } } }
相关文章推荐
- Android客户端 和 pc服务器 建立socket连接并发送数据
- C# Socket 您的主机中的软件中止了一个已建立的连接 An established connection was aborted by the software in your host machine
- Android Socket 轻松建立连接和发送消息
- 请教:C#网络编程相关的知识,建立socket服务器时向客户端连接,就建立不了了?
- Android Socket 轻松建立连接和发送消息
- C#进行Socket 连接发送和接收数据
- MFC屏幕截图,保存,显示,放到剪贴板,结构体为char*格式用于socket发送等
- android UDP多点广播,并自动建立Socket连接
- IOS Socket 03-建立连接与登录
- 用Wireshark分析Socket连接建立的过程
- Android中通过socket建立长连接实现推送功能
- 网络 客户端 多种方法 建立与服务端的连接 接口:服务器名,IP socket connect
- C#实现类似qq的屏幕截图程序
- C#使用Socket发送和接收TCP数据示例
- C#软件开发实例.私人订制自己的屏幕截图工具(十)在截图中包含鼠标指针形状
- socket连接 java服务器端 C#客户端进行交互 简单例子
- [C#]手把手教你打造Socket的TCP通讯连接(三)
- [C#]手把手教你打造Socket的TCP通讯连接(一)
- C# 如何获取屏幕的截图,以及如何在图像上添加文字
- httpclient向HTTPS发送数据建立SSL连接时的异常