远程协助
程序员文章站
2022-05-15 20:52:21
...
对程序进行分析:可分为
第一部份,建立网络的联结
服务端代码:
Try
tlTcpListen = New TcpListener(iPort)
tlTcpListen.Start()
TcpClient = tlTcpListen.AcceptTcpClient()
nsStream = TcpClient.GetStream(
BReader = New BinaryReader(nsStream) ‘建立读写通道 二进制数据’
BWriter = New BinaryWriter(nsStream)
blistener = True
While blistener
Dim sMessage As String = BReader.Read() '////获取客户端发来信
End While
Catch ex As System.Security.SecurityException
MessageBox.Show("侦听失败!", "错误")
Catch eio As System.IO.IOException
close()
End Try
客户端代码:
Dim ipRemote As IPAddress
Dim tcpClient As TcpClient
Try
ipRemote = IPAddress.Parse("127.0.0.1")
Catch
MessageBox.Show("输入的IP地址不合法!", "错误提示!")
Return
'判断给定的IP地址的合法性
End Try
Try
tcpClient = New TcpClient("127.0.0.1", iPort)
nsStream = tcpClient.GetStream()
bw = New BinaryWriter(nsStream)
br = New BinaryReader(nsStream)
Catch
MessageBox.Show("无法和远程主机8000端口建立连接!", "错误提示!")
Return
End Try
thThreadRead = New Thread(New ThreadStart(AddressOf readdata))
thThreadRead.Start()
第二部份,发送图片
2.图片处理
包括:1.显示器图片的获取
2.图片数据的获取
3.图片数据的显示
- 通过下列代码可获取桌面图片的信息
使用Graphic.CopyFromScreen 方法
Dim p1 As New Point(0, 0)
Dim p2 As New Point(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)
Dim pic As New Bitmap(p2.X, p2.Y)
Using g As Graphics = Graphics.FromImage(pic)
g.CopyFromScreen(p1, p1, p2)
End Using
newImg = pic
- 将图片转化为数据
使用LockBits 函数
Dim length As Integer
Dim rgb() As Byte
Dim data As BitmapData
Dim scan0 As System.IntPtr
length = rect.Height * 2 * rect.Width
ReDim rgb(length)
data = bmp.LockBits(rect, Drawing.Imaging.ImageLockMode.ReadWrite, _
Imaging.PixelFormat.Format16bppRgb555) ‘包含了将32位图转16位图’
scan0 = data.Scan0
System.Runtime.InteropServices.Marshal.Copy(scan0, rgb, 0, length)
scan0 = data.Scan0
System.Runtime.InteropServices.Marshal.Copy(scan0, rgb, 0, length)
bmp.UnlockBits(data)
(*同样使用LOCKBITS将数据还原为图片)
第三部份,指令的处理
3.指令的处理
包括:指令的获取
指令的发送
指令的执行
WndProc() 函数的重写,获取鼠标与键盘的数据
Protected Overrides Sub WndProc(ByRef m As Message) '获取鼠标键盘动作
MyBase.WndProc(m)
End Sub
高级功能:优化设置
特征分析:
1.显示器的图像非所有的都变化,有时只变化一部份
方法:
1.主要通过 将桌面图片划分成不同区域,只发送修改的区域的内容
2.通过将数据压缩,从而使数据量减少
3.进行XOR异或运算,发送改变区域的内容,在客户端再次XOR运算
32位 -〉 16位 (数据的压缩,在不影响视觉效果情况下,16位已足够应付大部份状况)
将图片划分成多份,只发送修改的部份
- 尽量高效的使用网络
*为了使程序不占用更多的流量,我们希望我们一边打游戏,一边还能远程,而不是远程导致占用大量流量,而使其它功能卡顿
包括:1.尽量少的发送数据
1.什么时候发送图片-还是在后台间隔一段时间进行对比(将耗费CPU资源,不过现在电脑功能强大);
1. 尽量少的代码
a) 尽量简单的实现
对了,需要注意哦;分块传输过程中,因为系统的设置,会自动使图像的横向数据保持为4的倍数,所以在传输过程中会产生黑线,可以在LOCKBITS中使用ImageLockMode.UserInputBuffer来处理
推荐阅读
-
本地Windows远程桌面连接阿里云Ubuntu 16.04服务器的操作方法
-
sql2005创建远程登录帐户的sql语句
-
Sql Server2005实现远程备份数据库
-
python SSH模块登录,远程机执行shell命令实例解析
-
Intel被分析师看好:远程办公利好PC及服务器需求
-
连接到SQL Server 2008时,在默认的设置下SQL Server不允许进行远程连接可能会导致此失败(Microsoft SQL Server,错误:1006
-
PHP中通过fopen()函数访问远程文件示例
-
在Linux系统中安装web端的远程连接工具Wetty
-
shell脚本实现ssh-copy-id批量自动发送公钥到远程主机
-
python3利用tcp实现文件夹远程传输