`
net_liu
  • 浏览: 228814 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

获取客户端桌面信息

阅读更多

客户端:

namespace NetClient
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        IPAddress ip;
        int port;
        Thread th;
        Socket NetClient;

        /// <summary>
        /// 连接
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnOpen_Click(object sender, EventArgs e)
        {
            try
            {
                ip = IPAddress.Parse(txtAddress.Text);
                port = Convert.ToInt32(numPort.Value);
                btnOpen.Enabled = false;
                th = new Thread(Connection);
                th.Start();
            }
            catch (Exception ex)
            {
                MessageBox.Show("IP地址格式输入不正确!" + ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void Connection()
        {
            NetClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint ie = new IPEndPoint(ip, port);//服务器的IP和端口 
            try
            {
                //因为客户端只是用来向特定的服务器发送信息,所以不需要绑定本机的IP和端口。不需要监听。 
                NetClient.Connect(ie);
                while (true)
                {
                    byte[] dt = GetDesktop();
                    NetClient.Send(dt);
                    dt = null;
                    Thread.Sleep(500);
                }
            }
            catch (SocketException e)
            {
                MessageBox.Show("连接失败:" + e.Message);
            }
            if (NetClient.Connected)
            {
                NetClient.Shutdown(SocketShutdown.Both);
                NetClient.Close();
            }
        }

        private byte[] GetDesktop()
        {
            Bitmap bmp = new Bitmap(Screen.AllScreens[0].Bounds.Width, Screen.AllScreens[0].Bounds.Height);
            using (Graphics g = Graphics.FromImage(bmp))
            {
                g.CopyFromScreen(new Point(0, 0), new Point(0, 0), bmp.Size);
            }
            MemoryStream ms = new MemoryStream();
            bmp.Save(ms, ImageFormat.Jpeg);
            byte[] data = new byte[ms.Length];
            ms.Position = 0;
            ms.Read(data, 0, data.Length);
            ms.Close();
            return data;
        }

        /// <summary>
        /// 断开
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnClose_Click(object sender, EventArgs e)
        {
            btnOpen.Enabled = true;
            if (NetClient != null)
                NetClient.Close();
            if (th != null && th.IsAlive)
                th.Abort();
        }
    }
}

 

服务器端:

namespace NETServer
{
    public delegate void ClientConnectionEventHandler(Socket socket, string ip, bool con);
    public delegate void DataReceiveEventHandler(byte[] data, string ip);

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.ClientConnection += new ClientConnectionEventHandler(Form1_ClientConnection);
            this.DataReceive += new DataReceiveEventHandler(Form1_DataReceive);
        }

        void Form1_DataReceive(byte[] data, string ip)
        {
            if (tabControl1.InvokeRequired)
            {
                tabControl1.Invoke(new DataReceiveEventHandler(Form1_DataReceive), data, ip);
            }
            else
            {
                try
                {
                    TabPage tb = FindTab(ip);
                    if (tb != null)
                    {
                        (tb.Controls[0] as PictureBox).Image = Image.FromStream(new MemoryStream(data));
                        data = null;
                    }
                }
                catch { }
            }
        }

        void Form1_ClientConnection(Socket socket, string ip, bool con)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new ClientConnectionEventHandler(Form1_ClientConnection), socket, ip, con);
            }
            else
            {
                TabPage tp = FindTab(ip);
                if (con)
                {
                    Thread th = new Thread(ClientListen);
                    if (tp == null)
                        InitTab(ip, th);
                    th.Start(socket);
                }
                else
                {
                    if (tp != null)
                    {
                        Thread t = tp.Tag as Thread;
                        if (t != null)
                            t.Abort();
                        tabControl1.TabPages.Remove(tp);
                    }
                }
                if (tabControl1.TabPages.Count > 0)
                    this.Text = string.Format("已连接,共有 {0} 个连接...", tabControl1.TabPages.Count);
                else
                    this.Text = "当前没有客户端连接...";
            }
        }

        private void InitTab(string ip, Thread th)
        {
            TabPage tab = new TabPage();
            PictureBox p = new PictureBox();
            p.Dock = DockStyle.Fill;
            p.SizeMode = PictureBoxSizeMode.StretchImage;
            tab.Controls.Add(p);
            p.Show();
            tab.Tag = th;
            tab.Text = ip;
            this.tabControl1.TabPages.Add(tab);
        }

        public event ClientConnectionEventHandler ClientConnection;
        private void ConnectionProxy(Socket socket, string ip, bool con)
        {
            if (ClientConnection != null)
                ClientConnection(socket, ip, con);
        }

        public event DataReceiveEventHandler DataReceive;
        private void ReceiveProxy(byte[] data, string ip)
        {
            if (DataReceive != null)
                DataReceive(data, ip);
        }


        Thread th;
        Socket NetSocket;
        private void Form1_Load(object sender, EventArgs e)
        {
            this.Text = "正在监听,等待客户端连接...";
            th = new Thread(InitServer);
            th.Start();
        }

        private TabPage FindTab(string ip)
        {
            foreach (TabPage tp in tabControl1.TabPages)
            {
                if (tp.Text == ip)
                    return tp;
            }
            return null;
        }

        private void InitServer()
        {
            int port = 2000;
            IPAddress ip = null;
            IPAddress[] id = Dns.GetHostAddresses("");
            foreach (IPAddress i in id)
            {
                Regex reg = new Regex(@"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}");
                if (!i.IsIPv6LinkLocal && reg.IsMatch(i.ToString()))
                {
                    ip = i;
                    break;
                }
            }
            if (ip == null)
                ip = IPAddress.Parse("127.0.0.1");
            IPEndPoint ipep = new IPEndPoint(ip, port);//用指定的端口和ip初始化IPEndPoint类的新实例 
            NetSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            NetSocket.Bind(ipep);
            while (true)
            {
                NetSocket.Listen(10);
                Socket client = NetSocket.Accept();
                IPEndPoint clientip = (IPEndPoint)client.RemoteEndPoint;
                ConnectionProxy(client, clientip.Address.ToString(), true);
            }
        }

        private void ClientListen(object obj)
        {
            Socket client = obj as Socket;
            if (client == null)
                return;
            while (true)
            {//循环来不断的从客户端获取信息
                byte[] data = new byte[200000];
                int bf = client.Receive(data);
                if (bf == 0)
                {
                    ConnectionProxy(client, ((IPEndPoint)client.RemoteEndPoint).Address.ToString(), false);
                    break;
                }
                ReceiveProxy(data, ((IPEndPoint)client.RemoteEndPoint).Address.ToString());
            }
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        { 
            if (NetSocket != null)
                NetSocket.Close();
            if (th != null && th.IsAlive)
                th.Abort();
            if (MessageBox.Show("确定要断开客户端的连接吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK)
                e.Cancel = true;
        }

    }
}

 

分享到:
评论

相关推荐

    window下获取桌面图标

    游戏中,取的客户端桌面图标的信息,可以检测玩家的桌面都是什么

    C#获取本机各基础参数操作类,包含内容广泛,非常实用好用

    获取客户端内网IPv6地址 获取客户端内网IPv4地址 获取客户端内网IPv4地址集合 获取客户端外网IP地址 获取本机公网IP地址 获取硬盘序号 获取CpuID 获取操作系统类型 获取操作系统名称 获取物理内存信息 获取主板id ...

    远程桌面监控系统 主程序分服务器端和客户端

    基于VC++的远程桌面监控系统,主程序分服务器端和客户端,服务器端启动后自动获取本机IP,然后可以修改默认等待端口,客户端则需要指定服务端IP和对应端口

    最新新浪微博客服端 AIR桌面客户端

    在获取大量信息的同时,可以进行即时分享加上微博爆炸式传播的特点,这让微博逐渐成为了很多人进行网络交流的平台。 今天我们要为大家介绍的这款应用是由老虎威开发的微博AIR桌面客户端,其基于Adobe AIR平台,并...

    西数个人家庭云PC端桌面版管理软件wdmycloud客户端PC端

    无金币者发奋寻找,不负众望,现底价发布,单体安装包,抵制拆分、高价不良分享者~!

    RPA中级认证-桌面程序表格数据获取.rar

    包含真题和答案,验证已过 1、请打开Uibot Creator,并创建名为“桌面程序表格数据获取”的流程,项目位置为系统默认 2、使用Uibot启动“表格数据获取”客户端程序,目录为“C\客户端\表格数据获取.exe”

    新浪微博桌面2012 v2.1.0.30384

    新浪微博近日联手迅雷客户端技术,推出全新桌面客户端--微博桌面2012版。微博桌面2012采用迅雷Bolt界面引擎技术,对原有桌面客户端进行重新构架,强化界面、操作、交互等各方面产品性能。 新布局新外观,微博舒适...

    java servlet获得客户端相关信息的简单代码

    主要介绍了java servlet获得客户端相关信息的简单代码,有需要的朋友可以参考一下

    FTP客户端下载软件

    3.特别注意下边红色字体的提示FTP无法获取目录解决办法上传时如果无法取得目录列表,点击编辑,选择防火墙设置取消被动(PASV)模式。1.打开FTP工具,找到编辑(支持国产,此处仅以8UFTP为例,其它FTP工具操作与下面...

    Ubuntu下神州数码代理客户端

    如果符合以上两点,则必须使用--dhcp模式启动zdclient,而且在认证成功后,是需要运行系统的DHCP客户端重新获取一次IP的,通常是dhclient,这一点在启动脚本dhcp_zdc_run.sh内已经包含。 至于在认证前已经能获得...

    Whalebird-4.0.0-darwin-x64.dmg 桌面应用程序的Mastodon和Pleroma客户端

    该客户端有许多快捷方式,因此您可以使用这些快捷方式控制此应用程序。您可以跳转另一个时间轴来输入Ctrl k,这是跳转功能。 您可以选择深色主题,例如Mastodon网络和其他颜色主题。您可以根据需要自定义颜色主题。...

    开屏桌面画报v3.6.1版

    2、桌面壁纸模式实现随机获取海量壁纸库中精选壁纸的功能; 3、客户端与网站结合,实现用客户端查看往期图片服务; 4、自由调整工具条透明度; 5、默认浏览器(如遨游、Firefox)打开桌面超链; 6、...

    降低成本 化繁为简——IBM智能商务桌面云(SBDC)

    IBM云计算智能商务桌面是一种“虚拟化客户端”,通过统一的门户获取信息和资源,为用户提供一个安全统一的逻辑接入点和一致的用户界面;整合业务应用,文件和打印服务器环境。重新规划服务器,最大限度地利用和保护...

    C#远程监控(获取远程信息)

    实现远程监控。实现类似QQ远程桌面的功能。(内含源码)

    实时监控局域网电脑的远程活动桌面

    实时获取局域网指定电脑的活动桌面! 达到对局域网电脑实时监控的目的! 不影响客户端操作, 客户端为后台自动运行。只在进程中能看到

    远程桌面控制

    这是一个利用VNC开发的远程桌面监控的Demo,多文档类型的,可以连接多个客户端进行显示,然后可以操作连接客户的机器。有需要的朋友可以看看,非本人编写,收藏的

    远程控制计算机鼠标键盘的实现

    可以获取客户端的屏幕,并对其鼠标键盘进行远程控制

    vorta:Borg桌面备份客户端

    Vorta是macOS和Linux桌面的备份客户端。 它将强大的与您的桌面环境集成在一起,以保护您的数据免受磁盘故障,勒索软件和盗窃的侵害。 为什么这么好? :star-struck: 使用作为后端的加密,重复数据删除和压缩备份。...

    VC 远程锁定计算机、远程桌面、鼠标控制等源码.rar

    VC 远程锁定计算机、远程桌面、获取远程电脑桌面、远程鼠标控制等源码,编译时需要:VC98\Lib\WS2_32.LIB这个类库,你可以在VC目录下找到它,若没有的话去网上搜下,程序主程序分客户端和网络端。可以锁定远程计算机...

    civicrm-electron:CiviCRM的桌面客户端

    一个概念验证桌面应用程序,可以与远程CiviCRM安装进行对话并获取联系人详细信息,例如通讯录。 建造 获取您的Electron版本: electron --version 使用电子打包机: electron-packager . CiviCRM --out=../build...

Global site tag (gtag.js) - Google Analytics