C#局网监控UDP

这篇文章是参考 http://bbs.csdn.net/topics/380129423 

修改的是协议和语言也增加了部分代码。


此篇源码是初期版本


客户端(发送端)

</pre><pre name="code" class="csharp">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.Threading;
using System.Net;
using System.Net.Sockets;
using System.IO;
namespace ClientPre
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
       private  UdpClient client;

       
       string a = "";
        private void Form1_Load(object sender, EventArgs e)
        {
            IPEndPoint ip = new IPEndPoint(IPAddress.Any, 22222);
            client = new UdpClient(ip);

            sends();
           timer1.Enabled = true;
        }
       //发送消息的方法
</pre><pre name="code" class="csharp">        private void sends() {
            IPEndPoint ip = new IPEndPoint(IPAddress.Parse("225.1.1.1"), 55555);
            List<byte> list = new List<byte>();
            int xi = 250;
            int yi = 150;
            int xi1 = 0;
            int yi1 = 0;
      //由于UDP协议包不能太大所以要将图片切片
for(int i=1;i<6;i++){ for(int j=1;j<7;j++){ if(i!=5){ xi1=xi; yi1=yi; //(((i-1)*xi,(j-1)*yi),((i-1)*xi,(j-1)*yi),xi1*yi1) }else{ xi1=336; if(j==6){ yi1=18; //(((i-1)*xi,(j-1)*yi),((i-1)*xi,(j-1)*yi),xi1*yi1) } } Bitmap btmp = new Bitmap(xi1, yi1); using (Graphics gs = Graphics.FromImage(btmp)) { using (MemoryStream ms = new MemoryStream()) { gs.CopyFromScreen(new Point((i - 1) * xi, (j - 1) * yi),new Point(0, 0), new System.Drawing.Size(xi1,yi1)); btmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); byte[] bystr = ASCIIEncoding.Default.GetBytes(i+","+j); byte[] by = ms.ToArray(); list.AddRange(bystr); list.AddRange(by); client.Send(list.ToArray(), list.ToArray().Length, ip); a = (ms.ToArray().Length).ToString(); list.Clear(); } } } this.Text = a; } } //timer 控件循环发送 private void timer1_Tick(object sender, EventArgs e) { sends(); } }}
 
服务端(接收端) 

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.Threading;
using System.Net;
using System.Net.Sockets;
using System.IO;
namespace SerPre
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private delegate void ShowPru(byte[] by );
        ShowPru sp;


        private Bitmap btmp = new Bitmap(System.Windows.Forms.SystemInformation.VirtualScreen.Width, System.Windows.Forms.SystemInformation.VirtualScreen.Height);
        
        UdpClient client;
        Thread tr;
        private void Form1_Load(object sender, EventArgs e)
        {
            sp = new ShowPru(Shows);
            IPEndPoint ip = new IPEndPoint(IPAddress.Any,55555);
            client = new UdpClient(ip);
      
            client.JoinMulticastGroup(IPAddress.Parse("225.1.1.1"),100);
            pictureBox1.Image = btmp;
            tr = new Thread(Re);
            tr.Start();
        }
        //接收消息
        private void Re() {
            while(true){
                IPEndPoint ip = new IPEndPoint(IPAddress.Parse("225.1.1.1"), 55555);
                byte[] by = client.Receive(ref ip);
                //this.Text = by.Length.ToString();
                this.Invoke(sp, by);
            }

        }
        /// <summary>
        /// 局部绘制图片
        /// </summary>
        /// <param name="by">图片数据</param>
        private void Shows(byte[] by) {
            List<byte> by1 = new List<byte>();
            by1.AddRange(by);
            string ss = ASCIIEncoding.Default.GetString(by, 0, 3);
            string[] mm = ss.Split(',');
            int i = Convert.ToInt32(mm[0]);
            int j = Convert.ToInt32(mm[1]);
            //
            int xi = 250;
            int yi = 150;
            int xi1 = 0;
            int yi1 = 0;
            by1.RemoveAt(0);
            by1.RemoveAt(0);
            by1.RemoveAt(0);
           Graphics gs = Graphics.FromImage(btmp);
            
            using (MemoryStream ms = new MemoryStream(by1.ToArray()))
            {
                Bitmap bit = new Bitmap(ms);
                if (i != 5)
                {
                    xi1 = xi;
                    yi1 = yi;
                }
                else
                {
                    xi1 = 336;
                    if (j == 6)
                    {
                        yi1 = 18;
                    }
                }
                gs.DrawImage(bit, (i - 1) * xi, (j - 1) * yi);
                pictureBox1.Image = btmp;

            }
            gs.Dispose();

            this.Text = by.Length.ToString();
        }
    }
}

源码下载地址:http://download.csdn.net/detail/ares_basic/8536801


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值