客户端:
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;
}
}
}
分享到:
相关推荐
游戏中,取的客户端桌面图标的信息,可以检测玩家的桌面都是什么
获取客户端内网IPv6地址 获取客户端内网IPv4地址 获取客户端内网IPv4地址集合 获取客户端外网IP地址 获取本机公网IP地址 获取硬盘序号 获取CpuID 获取操作系统类型 获取操作系统名称 获取物理内存信息 获取主板id ...
基于VC++的远程桌面监控系统,主程序分服务器端和客户端,服务器端启动后自动获取本机IP,然后可以修改默认等待端口,客户端则需要指定服务端IP和对应端口
在获取大量信息的同时,可以进行即时分享加上微博爆炸式传播的特点,这让微博逐渐成为了很多人进行网络交流的平台。 今天我们要为大家介绍的这款应用是由老虎威开发的微博AIR桌面客户端,其基于Adobe AIR平台,并...
无金币者发奋寻找,不负众望,现底价发布,单体安装包,抵制拆分、高价不良分享者~!
包含真题和答案,验证已过 1、请打开Uibot Creator,并创建名为“桌面程序表格数据获取”的流程,项目位置为系统默认 2、使用Uibot启动“表格数据获取”客户端程序,目录为“C\客户端\表格数据获取.exe”
新浪微博近日联手迅雷客户端技术,推出全新桌面客户端--微博桌面2012版。微博桌面2012采用迅雷Bolt界面引擎技术,对原有桌面客户端进行重新构架,强化界面、操作、交互等各方面产品性能。 新布局新外观,微博舒适...
主要介绍了java servlet获得客户端相关信息的简单代码,有需要的朋友可以参考一下
3.特别注意下边红色字体的提示FTP无法获取目录解决办法上传时如果无法取得目录列表,点击编辑,选择防火墙设置取消被动(PASV)模式。1.打开FTP工具,找到编辑(支持国产,此处仅以8UFTP为例,其它FTP工具操作与下面...
如果符合以上两点,则必须使用--dhcp模式启动zdclient,而且在认证成功后,是需要运行系统的DHCP客户端重新获取一次IP的,通常是dhclient,这一点在启动脚本dhcp_zdc_run.sh内已经包含。 至于在认证前已经能获得...
该客户端有许多快捷方式,因此您可以使用这些快捷方式控制此应用程序。您可以跳转另一个时间轴来输入Ctrl k,这是跳转功能。 您可以选择深色主题,例如Mastodon网络和其他颜色主题。您可以根据需要自定义颜色主题。...
2、桌面壁纸模式实现随机获取海量壁纸库中精选壁纸的功能; 3、客户端与网站结合,实现用客户端查看往期图片服务; 4、自由调整工具条透明度; 5、默认浏览器(如遨游、Firefox)打开桌面超链; 6、...
IBM云计算智能商务桌面是一种“虚拟化客户端”,通过统一的门户获取信息和资源,为用户提供一个安全统一的逻辑接入点和一致的用户界面;整合业务应用,文件和打印服务器环境。重新规划服务器,最大限度地利用和保护...
实现远程监控。实现类似QQ远程桌面的功能。(内含源码)
实时获取局域网指定电脑的活动桌面! 达到对局域网电脑实时监控的目的! 不影响客户端操作, 客户端为后台自动运行。只在进程中能看到
这是一个利用VNC开发的远程桌面监控的Demo,多文档类型的,可以连接多个客户端进行显示,然后可以操作连接客户的机器。有需要的朋友可以看看,非本人编写,收藏的
可以获取客户端的屏幕,并对其鼠标键盘进行远程控制
Vorta是macOS和Linux桌面的备份客户端。 它将强大的与您的桌面环境集成在一起,以保护您的数据免受磁盘故障,勒索软件和盗窃的侵害。 为什么这么好? :star-struck: 使用作为后端的加密,重复数据删除和压缩备份。...
VC 远程锁定计算机、远程桌面、获取远程电脑桌面、远程鼠标控制等源码,编译时需要:VC98\Lib\WS2_32.LIB这个类库,你可以在VC目录下找到它,若没有的话去网上搜下,程序主程序分客户端和网络端。可以锁定远程计算机...
一个概念验证桌面应用程序,可以与远程CiviCRM安装进行对话并获取联系人详细信息,例如通讯录。 建造 获取您的Electron版本: electron --version 使用电子打包机: electron-packager . CiviCRM --out=../build...