• C#局域网桌面共享软件制作(一)


    很久没有写文章了,今天分享的内容是局域网桌面共享软件,相信很多人都做过,也可能遇到一些问题,这里我将一一测试。

    涉及到的内容有:局域网文件传输、桌面截屏、图片压缩等。为了更直白的演示程序的功能所以没有对代码进行封装。

    获取桌面图片,十分简单.

            private Bitmap GetScreen()
            {
                Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
                Graphics g = Graphics.FromImage(bitmap); 
    g.CopyFromScreen(
    0, 0, 0, 0, bitmap.Size);
    return bitmap;
    }

    客户端

    定义全局变量

    Socket sendsocket;
    

    按钮事件(连接服务器,并发送桌面截图)

    private void btnConn_Click(object sender, EventArgs e)
            {
                try
                {
                    sendsocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    //实例化socket,ip为192.168.1.106,Port为10001
                    IPEndPoint ipendpiont = new IPEndPoint(IPAddress.Parse(textBox1.Text.Trim()), 10001);
                    sendsocket.Connect(ipendpiont);
                    //建立终结点
                    Thread th = new Thread(new ThreadStart(threadimage));
                    th.IsBackground = true;
                    th.Start();
                }
                catch (Exception ee)
                {
                    MessageBox.Show(ee.Message);
                    return;
                }
                this.Hide();//隐藏窗体
            }

    线程执行体

    private void threadimage()
            {
                try
                {
                    while (true)
                    {
                        MemoryStream ms = new MemoryStream();
                        GetScreen().Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);//我这里用bmp格式
                        byte[] b = ms.ToArray();
                        sendsocket.Send(b);
                        Thread.Sleep(1000);//我这里设置1秒发送一次
                    }
                }
                catch (Exception ee)
                {
                    MessageBox.Show(ee.Message);
                    return;
                }
            }

    服务端(窗体中有一个PictureBox)

    定义全局变量

    Socket hostSocket;
    Thread thread;
    

    按钮事件(开启服务)

    private void btnStart_Click(object sender, EventArgs e)
            {
                Socket receiveSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint hostIpEndPoint = new IPEndPoint(IPAddress.Parse(textBox1.Text.Trim()), 10001);
                //关联结点
                receiveSocket.Bind(hostIpEndPoint);
                receiveSocket.Listen(10);
                MessageBox.Show("start");
                hostSocket = receiveSocket.Accept();
    
                thread = new Thread(new ThreadStart(trreadimage));
                thread.IsBackground = true;
                thread.Start();
            }

    线程执行体

    private void trreadimage()
            {
                try
                { 
                    while (true)
                    {
                        byte[] b = new byte[1024 * 10000];//图片很大
                        hostSocket.Receive(b);
                        MemoryStream ms = new MemoryStream(b);
                        Image img=Image.FromStream(ms);
                        picReceive.Image = img;      
                    }
                }
                catch (Exception ee)
                {
                    MessageBox.Show(ee.Message);
                    thread.Abort();
                }
            }

    如果你去测试这个程序就会发现存在一些问题,后面我将处理你所遇到的问题。

    由于程序简单所以就不上传源码附件了。

    C#局域网桌面共享软件制作(二)

     转载,请注明出处和相关链接,否则追究其法律责任!

  • 相关阅读:
    android学习---Gallery画廊视图
    王立平--查看SQLite中的数据信息
    java中CyclicBarrier简单入门使用
    [ExtJS5学习笔记]第三十三节 sencha extjs 5 grid表格导出excel
    使用target打开的iframe 获取src的问题
    读《暗时间》的思考
    hdfs
    编译最新的SQLite 3.8.4.3为一个DLL
    使用Highcharts生成折线图_at last
    CentOS7 安装EFK(elasticsearch、fluent、kibana)进行Docker下日志搜集
  • 原文地址:https://www.cnblogs.com/liuxiaobo93/p/3675387.html
Copyright © 2020-2023  润新知