这篇文章是参考 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