UDP简单桌面同步

最近公司接到 视频会议的项目,顺便找了一些Socket通讯的资料,做个小例子测试,拿出来分享下,高手可以直接飘过吧!!

 

国际惯例,看图先!!

 

简单分端:

1.组播端:

 

 

2.听众端:

 

 

3.同步窗口:

 

 

核心代码:

// 1. 组播端

 

using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Drawing.Imaging;
using  System.IO;
using  System.Text;
using  System.Net;
using  System.Net.Sockets;
using  System.Windows.Forms;
using  System.Threading;
using  System.Runtime.InteropServices;

namespace  WindForms
{
    
public   partial   class  Form1 : Form
    {
        
string  path  =  Application.StartupPath
            
// +"/2011.bmp";
             +   " /boy.jpg " ;    

        
private  ScreenCapture screen  =   new  ScreenCapture();

        
public  Form1()
        {
            InitializeComponent();

            pictureBox1.Image 
=  Image.FromFile(path);

            
// Init();
        }

        
private   void  button1_Click( object  sender, EventArgs e)
        {
            ToggleButton();
        }

        
private   void  timer1_Tick( object  sender, EventArgs e)
        {
            sendScreen();
        }

        
private   void  button2_Click( object  sender, EventArgs e)
        {
            ToggleButton();
        }

      

        
#region   Test Two 方案二

        
public   void  sendScreen()
        {
            
byte [] data  =  screenData();

            IPEndPoint iep1 
=   new  IPEndPoint(IPAddress.Parse( " 127.0.0.1 " ),  2000 );

            
// IPEndPoint iep1 = new IPEndPoint(IPAddress.Parse("192.168.1.109"), 2000);
            
// IPEndPoint iep2 = new IPEndPoint(IPAddress.Parse("192.168.1.107"), 2000);

            Socket socket 
=   new  Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 
1 );

            socket.SendTo(data, iep1);
            
// socket.SendTo(data, iep2);

            socket.Close();
            textBox1.Text 
+=   " 发送完毕!!\r\n " ;
        }

        
private   byte [] screenData()
        {
            MemoryStream ms 
=   new  MemoryStream();
            
try
            {
                
byte [] by;
                Bitmap bmp 
=   new  Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
                Graphics gp 
=  Graphics.FromImage(bmp);

                gp.CopyFromScreen(
0 0 0 0 new  Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height));

                Image im 
=  bmp.GetThumbnailImage( 320 256 null , IntPtr.Zero);
                bmp 
=   new  Bitmap(im);
                bmp.Save(ms, ImageFormat.Jpeg);
                by 
=  ms.GetBuffer();

                pictureBox2.Image 
=  Image.FromStream(ms);

                ms.Close();
                ms.Dispose();
                
return  Compress.CompressBytes(by);
            }
            
catch
            {
                ms.Close();
                ms.Dispose();
                
return   null ;
            }
        }

        
#endregion

        
private   void  pictureBox2_DoubleClick( object  sender, EventArgs e)
        {
            
// this.MaximizeBox = true;
            
// pictureBox2.Dock = DockStyle.Fill;
        }

        
public   void  ToggleButton( )
        {
            timer1.Enabled 
=   ! timer1.Enabled;
            button1.Enabled 
=   ! button1.Enabled;
            button2.Enabled 
=   ! button2.Enabled;
        }
    }
}

// 2.听众端

 

using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Net;
using  System.Net.Sockets;
using  System.IO;
using  System.Text;
using  System.Windows.Forms;

namespace  WindForms_Client
{
    
public   partial   class  Form1 : Form
    {
        
string  br  =   " \r\n " ;

        
public  Form1()
        {
            InitializeComponent();
        }

        
public   void  getPic()
        {
            Socket s 
=   new  Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint point 
=   new  IPEndPoint(IPAddress.Parse( " 127.0.0.1 " ),  2000 );
            s.Bind(point);
            
byte [] data  =   new   byte [ 1024 ];
            s.Receive(data);
            MemoryStream ms 
=   new  MemoryStream(data);

            pictureBox1.Image 
=  Image.FromStream(ms);

            ms.Dispose();
            s.Close();

        }

        
private   void  timer1_Tick( object  sender, EventArgs e)
        {
            Listen();
        }

        
private   void  button1_Click( object  sender, EventArgs e)
        {
            button1.Enabled 
=   false ;
            button2.Enabled 
=   true ;

            timer1.Enabled 
=   true ;
        }

        
public   void  Listen()
        {
            Socket sock 
=   new  Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

            
try
            {
                IPEndPoint iep 
=   new  IPEndPoint(IPAddress.Any,  2000 );
                sock.Bind(iep);
                EndPoint ep 
=  (EndPoint)iep;

                textBox1.Text 
+=   " 收到数据!!\r\n " ;

                
byte [] data  =   new   byte [ 1024   *   64 ];

                
int  recv  =  sock.ReceiveFrom(data,  ref  ep);

                MemoryStream ms 
=   new  MemoryStream(Compress.DecompressBytes(data));

                pictureBox1.Image 
=  Image.FromStream(ms);

                ms.Dispose();

                sock.Close();

            }

            
catch  (SocketException)
            {
                sock.Close();
                textBox1.Text 
=   " \r\n 出现异常,线程终止!! " ;
            }

        }

        
private   void  button2_Click( object  sender, EventArgs e)
        {
            button1.Enabled 
=   true ;
            button2.Enabled 
=   false ;
            timer1.Enabled 
=   false ;
        }

        
private   void  pictureBox1_DoubleClick( object  sender, EventArgs e)
        {
            
if  (pictureBox1.Dock  !=  DockStyle.Fill)
            {
                pictureBox1.Dock 
=  DockStyle.Fill;
                
this .FormBorderStyle  =  FormBorderStyle.None;
                
this .WindowState  =  FormWindowState.Maximized;
            }
            
else
            {
                pictureBox1.Dock 
=  DockStyle.None;
                
this .FormBorderStyle  =  FormBorderStyle.Fixed3D;
                
this .WindowState  =  FormWindowState.Normal;
            }
        }
    }
}

 

转载于:https://www.cnblogs.com/dzone/archive/2011/06/04/2072541.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值