大家说说啊
我现在是利用WINDOWS的API函数 截屏,然后发送JPG文件回去显示……不是很好啊

解决方案 »

  1.   

    简单的
    1.截取屏幕技术,一般一秒截一次就可以了
    2.图片压缩技术,压成JPEG就可以了,因为图片太大会影响到传输速度
    3.文件传输技术,可以考虑UDP、TCP/IP、Socket根据技术到网上去相应的资料,很多的。复杂一点的,在简单的基础上再加上:
    4.图像对比,将本次截图和上次截图对比,可以减少传输量,适合于互联网传输
    5.文件压缩技术,自己写算法,对传输的文件进行压缩。好像没必要吧,zip组件就可以了
    6.突破防火墙,又不是搞木马,没这个必要吧
    7.隐藏自己,不要被杀毒软件发现了。靠,就是在搞木马了
      

  2.   


    Server端 接收
    //监听按钮
    private void btnListen_Click(object sender, System.EventArgs e)
    {
    address = IPAddress.Parse(this.txtAddress.Text.Trim());
    port = int.Parse(this.txtPort.Text.Trim()); this.statusBarPanel1.Text = "监听中……";


    try
    {
    this.listener = new TcpListener(address,port);
    this.listener.Start(); this.socket=this.listener.AcceptSocket(); if(this.socket.Connected) 
    {
    this.txtAddress.Enabled = false ;
    this.txtPort.Enabled = false;
    this.btnListen.Enabled = false;
    this.btnListen.Text = "已连接";
    this.statusBarPanel1.Text = "已经建立连接";

    MessageBox.Show("客户端("+this.socket.RemoteEndPoint.ToString()+")已连接!\r\n");
    this.stream = new NetworkStream(this.socket);
    this.reader = new StreamReader(this.stream);


    this.timer1.Start(); }
    }
    catch(Exception ex)
    {
    MessageBox.Show(ex.Message);
    } } //一秒做一次
    private void timer1_Tick(object sender, System.EventArgs e)
    {
    //接收文件
    string str = this.reader.ReadToEnd();
    //this.filecontent = "";
    // do
    // {
    // this.filecontent += str + Environment.NewLine;
    //
    // }while((str = this.reader.ReadLine()) != "%%%End"); //保存文件

    string filename = "c:\\temp.jpg"; System.Text.Encoding encoding = System.Text.Encoding.Default;
    FileStream filestream = new FileStream(filename,FileMode.Create,FileAccess.Write);
    StreamWriter sw = new StreamWriter(filestream,encoding); sw.WriteLine(str);
    sw.Flush(); sw.Close();
    filestream.Close();
    this.statusBarPanel1.Text = "文件接收成功! "+ DateTime.Now.ToLongTimeString();
    this.pictureBox1.Image = Image.FromFile("c:\\temp.jpg");

    }
      

  3.   


    Client端 发送
    [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]   
    private   static   extern   bool   BitBlt   (   
    IntPtr   hdcDest   ,   //目标设备的句柄   
    int   nXDest   ,   //   目标对象的左上角的X坐标   
    int   nYDest   ,   //   目标对象的左上角的X坐标   
    int   nWidth   ,   //   目标对象的矩形的宽度   
    int   nHeight   ,   //   目标对象的矩形的长度   
    IntPtr   hdcSrc   ,   //   源设备的句柄   
    int   nXSrc   ,   //   源对象的左上角的X坐标   
    int   nYSrc   ,   //   源对象的左上角的X坐标   
    System.Int32   dwRop   //   光栅的操作值   
    )   ;   
        
    [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]   
    private   static   extern   IntPtr   CreateDC   (   
    string   lpszDriver   ,   //   驱动名称   
    string   lpszDevice   ,   //   设备名称   
    string   lpszOutput   ,   //   无用,可以设定位"NULL"   
    IntPtr   lpInitData   //   任意的打印机数据   
    )   ;   
        
    private void btnListen_Click(object sender, System.EventArgs e)
    {
    string address 
    = this.txtAddress.Text.Trim();
    int port = int.Parse(this.txtPort.Text.Trim()); try
    {
    this.client = new TcpClient(address,port);
    this.btnListen.Enabled = false;
    this.btnListen.Text = "已连接";
    this.txtAddress.Enabled = false ;
    this.txtPort.Enabled = false;
    this.stream = this.client.GetStream();
    this.reader = new StreamReader(this.stream);
    this.writer = new StreamWriter(this.stream); this.timer1.Start();


    }
    catch(Exception ex) 
    {
    MessageBox.Show(ex.Message);
    }
    } //一秒做一次
    private void timer1_Tick(object sender, System.EventArgs e)
    {
    IntPtr   dc1   =   CreateDC("DISPLAY",null,null,(IntPtr)null);   
    //创建显示器的DC   
    Graphics   g1   =   Graphics.FromHdc(dc1);   
    //由一个指定设备的句柄创建一个新的Graphics对象   
    Bitmap   MyImage   =   new   Bitmap(Screen.PrimaryScreen.Bounds.Width,Screen.PrimaryScreen.Bounds.Height,g1);
    //根据屏幕大小创建一个与之相同大小的Bitmap对象   
    Graphics   g2   =   Graphics.FromImage(MyImage);   
    //获得屏幕的句柄   
    IntPtr   dc3   =   g1.GetHdc();   
    //获得位图的句柄   
    IntPtr   dc2   =   g2.GetHdc();   
    //把当前屏幕捕获到位图对象中
    BitBlt(dc2,0,0,Screen.PrimaryScreen.Bounds.Width,Screen.PrimaryScreen.Bounds.Height,dc3,0,0,13369376);
    //把当前屏幕拷贝到位图中
    g1.ReleaseHdc(dc3);   
    //释放屏幕句柄
    g2.ReleaseHdc(dc2);   
    //释放位图句柄    MyImage.Save("c:\\MyJpeg.jpg",ImageFormat.Jpeg);
    this.label3.Text = "图片已保存到c:\\MyJpeg.jpg  " + DateTime.Now.ToLongTimeString(); sendpic();

    } void sendpic()
    {
    try
    {
    string filename = "c:\\MyJpeg.jpg"; System.Text.Encoding encoding = System.Text.Encoding.Default;
    FileStream filestream = new FileStream(filename,FileMode.Open);
    StreamReader sr = new StreamReader(filestream,encoding); this.writer.WriteLine(sr.ReadToEnd());
    this.writer.Flush(); this.writer.WriteLine("%%%End");
    this.writer.Flush(); sr.Close();
    filestream.Close();
    }
    catch(Exception ex)
    {
    MessageBox.Show(ex.Message);
    }
    }