解决方案 »

  1.   

    服务器端:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Net;
    using System.Net.Sockets;
    using System.IO;
    using System.Threading;namespace Server
    {
        public partial class Server : Form
        {
            public Server()
            {
                InitializeComponent();
            }        private void Server_Load(object sender, EventArgs e)
            {        }        Thread MainThread;
            Thread ScreenThread;
            Socket socket;        [System.Runtime.InteropServices.DllImport("gdi32.dll")]
            private static extern bool BitBlt(
                IntPtr hdcDest, //目标设备的句柄
                int nXDest, //目标对象的左上角x坐标
                int nYDest, //目标对象的左上角Y坐标
                int nWidth, //目标对象的矩形宽度
                int nHeight,    //目标对象的矩形长度
                IntPtr hdcSrc,  //源设备的句柄
                int nXSrc,  //源对象的左上角x坐标
                int nYSrc,  //源对象的左上角y坐标
                System.Int32 dwRop  //光栅的操作值
                );        [System.Runtime.InteropServices.DllImport("gdi32.dll")]
            private static extern IntPtr CreateDC(
                string lpszDriver,  //驱动名称
                string lpszDevice,  //设备名称
                string lpszOutput,  //无用,设为null
                IntPtr lpInitData   //任意的打印机数据
                );        //获取Server的IP地址
            public static IPAddress GetServerIP()
            {
                IPHostEntry ieh = Dns.GetHostEntry(Dns.GetHostName());
                return ieh.AddressList[0];
            }        //监听 端口:8888
            private void BeginListen()
            {
                IPAddress ServerIp = GetServerIP();
                IPEndPoint iep = new IPEndPoint(ServerIp, 8888);
                socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                socket.Bind(iep);
                while (true)
                {
                    try
                    {
                        socket.Listen(10);
                        byte[] CommandData = new byte[2];
                        Socket newSocket = socket.Accept();
                        newSocket.Receive(CommandData);
                        string command = Encoding.Default.GetString(CommandData);
                        //判断命令
                        if (command == "00")//屏幕监控开启
                        {
                            ScreenSend();
                        }
                        else if (command == "01")
                        {
                            ScreenThread.Abort();//屏幕监控关闭
                        }
                    }
                    catch (System.Exception er)
                    {
                    }
                }
            }        //屏幕图像传输
            private void ScreenSend()
            {
                IPAddress ServerIp = GetServerIP();
                IPEndPoint iep = new IPEndPoint(ServerIp, 9999);
                socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                socket.Bind(iep);            while (true)
                {
                    try
                    {
                        socket.Listen(5);
                        Socket ScreenSocket = socket.Accept();
                        ScreenTimer.Enabled = true;
                    }
                    catch { }
                }
            }        //屏幕监控
            private void ScreenMonitor()
            {
                /*Screen scr = Screen.PrimaryScreen;
              Rectangle rc = scr.Bounds;
              int iWidth = rc.Width;
              int iHeight = rc.Height;
              Size mySize = new Size(rc.Width, rc.Height);
              Image bitmap = new Bitmap(iWidth, iHeight);          Graphics g = Graphics.FromImage(bitmap);
              g.CopyFromScreen(0,0,0,0,mySize);          bitmap.Save(@"c:/1.jpg");*/            IntPtr dc1 = CreateDC("DISPLAY", null, null, (IntPtr)null);
                //创建显示器DC
                Graphics g1 = Graphics.FromHdc(dc1);
                //由一个指定设备的句柄创建一个新的Graphics对象
                Image 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);
                //Bitblt(源场景,0,0,位图信息.位图宽度,位图信息.位图高度,桌面句柄,0,0,13369376) PS:SRCCOPY 13369376 将源矩形图象直接复制到目标矩形上
                g1.ReleaseHdc(dc3);
                //释放屏幕句柄
                g2.ReleaseHdc(dc2);
                //释放位图句柄
                MyImage.Save("C:/MyJpeg.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);            MemoryStream ms = new MemoryStream();
                MyImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                byte[] bytes = ms.GetBuffer();
                ms.Close();
                socket.Send(bytes);
            }        //屏幕定时器
            private void ScreenTimer_Tick(object sender, EventArgs e)
            {
                ScreenMonitor();
            }        //开启监听进程 BeginListen
            private void StartServer_Click(object sender, EventArgs e)
            {
                try
                {
                    MainThread = new Thread(new ThreadStart(BeginListen));
                    MainThread.Start();
                }
                catch (System.Exception er)
                {
                }
            }        //关闭所有进程
            private void StopServer_Click(object sender, EventArgs e)
            {
                socket.Close();
                MainThread.Abort();
            }
        }
    }
    我刚刚开始研究着做,希望大家能多多帮助我~
      

  2.   


    第二个窗口没用线程,这里就卡死了   while (true)
                {
                    try
                    {
                        socket.Connect(iep);
     
                        byte[] bytePicture = new byte[300 * 1024];
                        socket.Receive(bytePicture);
     
                        MemoryStream ms = new MemoryStream(bytePicture);
                        Image bm = Image.FromStream(ms);
                        ms.Close();
                        pictureBox1.Image = bm;
                    }
                    catch { }
                }
      

  3.   


    楼主你需的是这个
    http://download.csdn.net/detail/fengart/173494 看他的原码你就知了。他有你所需的全部功能。。还是加强版哦
      

  4.   

    draw code 128c source .net
      

  5.   

    silverlight很少人用了,有一些“安全”方面的坑拦住了许多人。silverlight访问tcp服务器,要注意两点:
    1. 要提供 943 端口安全认证。
    2. 服务器端口必须在 4502-4534 之间。其实这两点还不算变态,最变态的(也是微软最混蛋的)地方是,如果有问题,那么silverlight直接以“死机”作为对待,而不是给用户报告一个确定的异常信息。我实在想不明白为什么微软为什么会这样设计,这明显是想让自己的产品死掉的节奏啊?!