客户端:
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;
}
}
}
分享到:
相关推荐
需要注意的是,获取客户端信息可能会涉及隐私问题,因此在实际使用时应遵循相关法律法规,确保数据的合法、合规使用。此外,由于网络环境的复杂性,获取的信息可能存在误差,所以在处理这些信息时,应该有一定的容错...
这个"获取远程计算机桌面信息C++工程"提供了实现这一功能的源代码,特别适用于开发者或者学习者,他们想要深入理解远程桌面通信的工作原理或者构建自己的远程桌面解决方案。 在C++编程环境下,实现远程桌面信息获取...
标题“修复客户端远程桌面”指的是在使用远程桌面连接到服务器时遇到的问题,特别是与授权相关的错误。远程桌面服务是Windows操作系统提供的一种功能,允许用户通过网络从一个设备(客户端)控制另一个设备(服务器...
阿里云OSS(Object Storage Service)桌面客户端工具是一款专为用户设计的便捷数据管理软件,主要用于与阿里云的OSS服务进行交互。OSS是阿里云提供的海量、安全、低成本、高可靠的云存储服务,它允许用户存储和检索...
在本文中,我们将深入探讨基于VC++开发的远程桌面监控系统,它由服务器端和客户端两部分组成。 首先,我们要理解服务器端的功能。服务器端是系统的核心,负责接收并处理来自客户端的连接请求。在该系统中,服务器端...
4. **IP桌面显示Bginfo.exe**:这是Bginfo工具的可执行文件,用于运行并展示桌面信息。双击即可启动工具,按照预设的配置显示IP和主机名等信息。 5. **Bginfo.bat.lnk**:这是一个快捷方式文件,指向Bginfo.bat...
在管理和操作MongoDB时,有一个强大的桌面客户端工具是至关重要的,而"Robomongo"就是这样一款工具,专为Windows操作系统设计。 Robomongo(现更名为Robo 3T)是一款功能丰富的MongoDB管理工具,提供了一个直观的...
获取客户端内网IPv6地址 获取客户端内网IPv4地址 获取客户端内网IPv4地址集合 获取客户端外网IP地址 获取本机公网IP地址 获取硬盘序号 获取CpuID 获取操作系统类型 获取操作系统名称 获取物理内存信息 获取主板id ...
标题中的“一个桌面截图,并发送到客户端的小例子”是一个典型的计算机编程应用场景,涉及到的主要技术是截图功能实现和网络通信,具体来说就是利用图形用户界面(GUI)截取屏幕图像,然后通过Socket网络编程将截图...
6. **使用第三方远程桌面工具**:如果以上步骤都试过仍然无效,可以考虑使用如“remoter远程桌面客户端”这样的第三方软件。这些工具可能提供更灵活的设置和更好的兼容性。 例如,"mstsc v 61.183.120.186 console....
- 定期截取客户端桌面的屏幕图像,可以使用Windows API函数如`BitBlt`或`GetDIBits`来获取位图数据。 - 将屏幕图像数据打包成字节流,通过`Send`函数发送给服务器。 2. **服务器端实现**: - 创建`CAsyncSocket`...
Deskzilla是一款专为Bugzilla平台设计的Windows桌面客户端,它为用户提供了一个更加便捷的方式来管理和跟踪软件开发中的缺陷或问题。这个强大的工具集成了Bugzilla的所有核心功能,使得开发者和测试人员能够在本地...
在这个“svn版本库,桌面服务器,客户端打包版”中,包含了创建和管理SVN版本库所需的全部组件。 首先,让我们深入了解一下SVN的核心组成部分: 1. 版本库(Repository):这是SVN存储所有版本化文件的地方。...
【基于WMI的客户端信息采集工具】是一种利用Windows Management Instrumentation(WMI)技术来获取客户端计算机硬件信息的实用程序。WMI是微软提供的一种管理框架,它允许开发者通过标准的接口来访问和操作Windows...
在获取大量信息的同时,可以进行即时分享加上微博爆炸式传播的特点,这让微博逐渐成为了很多人进行网络交流的平台。 今天我们要为大家介绍的这款应用是由老虎威开发的微博AIR桌面客户端,其基于Adobe AIR平台,并...
在提供的文档《用Bginfo设置域客户端桌面显示主机名和IP地址信息.doc》中,你应该能找到更具体的步骤和参数说明,以及如何将主机名和IP地址这两项关键信息添加到桌面背景的详细指导。 总之,BGInfo是IT管理员的得力...
通过WMI,开发者可以获取远程计算机的详细信息,并执行管理操作。在VB2005中,使用ManagementObjectSearcher和ManagementObjectCollection等类来查询和操作WMI对象。 4. **网络通信**:为了实现远程桌面连接,代码...
在使用网站桌面客户端时,确保从官方渠道下载以保证安全,定期更新以获取最新功能和修复。同时,了解客户端的安全设置,比如数据同步选项和隐私保护措施,确保个人信息不被滥用。 总结来说,网站桌面客户端是将...
在实际的开发和运维工作中,为了方便地管理和操作Redis服务器,使用一款功能强大的桌面客户端工具是必不可少的。本资源提供的是一款免费的Redis桌面客户端管理工具,旨在简化Redis的日常管理任务。 这款免费的Redis...
【标题】"西数个人家庭云PC端桌面版管理软件wdmycloud客户端PC端" 提供了一种在个人计算机上管理西数(WD)My Cloud系列网络存储设备的方法。这款软件是专为用户在家或小型办公环境中,方便地访问、管理和备份数据而...