欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

远程协助

程序员文章站 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.图片数据的显示

  1. 通过下列代码可获取桌面图片的信息
    使用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


  1. 将图片转化为数据
    使用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.尽量少的发送数据
1.什么时候发送图片-还是在后台间隔一段时间进行对比(将耗费CPU资源,不过现在电脑功能强大);
1. 尽量少的代码
a) 尽量简单的实现

对了,需要注意哦;分块传输过程中,因为系统的设置,会自动使图像的横向数据保持为4的倍数,所以在传输过程中会产生黑线,可以在LOCKBITS中使用ImageLockMode.UserInputBuffer来处理

相关标签: 远程控制