UDP(User Datagram Protocol,用户数据报协议)是在互联网中常用的传输层协议,该协议提供了向另一用户程序发送的消息的最简便的协议机制。与TCP一样,其默认的下层协议是IP.UDP是面向操作的,不提供提交和复制保护,因此不能保证数据的可靠性传输。UDP一般用在可靠性较高的局域网中。

.NET 下可使用Socket 类编写基于UDP的网络程序,只要在创建Socket时将构造函数函数的第三个参数选为枚举值ProtocolType.Udp即可.此外,.NET的System.Net.Sockets命名空间下还有一个UdpClient类,可专门用于UDP的网络编程。-----摘自< C#.NET 框架高级编程技术案例教程  郭文夷等 P163>

第一种,使用Socket类

  IPEndPoint ip = new IPEndPoint(IPAddress.Parse(txtIP.Text), int.Parse(txtPort.Text));
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
serverSocket.Bind(ip);

第二种,使用UdpClient类

  IPAddress address = IPAddress.Parse(txtLocalIp.Text);
int port = Int32.Parse(txtLocalPort.Text);
IPEndPoint endPoint = new IPEndPoint(address, port);
UdpClient udpClient = new UdpClient(endPoint);

-------------------------------------------------------------------这里是分割线-----------------------------------------------

本文主要采用第一种,基于Socket编写一个Udp发包程序。服务器端不断发包,客户端根据接收到的点数据在窗体上绘制点,效果如下所示:

一.服务器端

1.创建一个Socket对象,绑定服务器端Ip和端口号。

2.创建一个线程用户获取客户机的Ip和端口号。大致是这样的,客户机连接到服务器,同时发送一个"你好"的消息,服务器端这样就可以获取到客户机的Ip和端口。

   private void btnStart_Click(object sender, EventArgs e)
{
if (serverSocket != null)
{
return;
}
IPEndPoint ip = new IPEndPoint(IPAddress.Parse(txtIP.Text), int.Parse(txtPort.Text));
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
serverSocket.Bind(ip); AppendTextToTxtLog(string.Format("服务器端是{0},正在等待客户端的连接",ip.ToString()));
Thread thread = new Thread(ReceiveData);
thread.IsBackground = true;
thread.Start(); }

3.发送数据

  private void SendData()
{
byte[] data = new byte[ * ];
int j = ;
Random r = new Random();
while (j >)
{
j--;
int x = r.Next();
int y = r.Next();
string msg = x.ToString() +","+ y.ToString();
data = Encoding.Default.GetBytes(msg);
for (int k = ; k < RemoteList.Count; k++)
{
int i = serverSocket.SendTo(data, data.Length, SocketFlags.None,RemoteList[k]);
AppendTextToTxtLog(string.Format("发送给客户端{0}的消息是{1}", RemoteList[k].ToString(), msg));
}
}
}

客户端

1.连接到服务器端

    private void btnConnected_Click(object sender, EventArgs e)
{
byte[] data = new byte[]; IPEndPoint ip = new IPEndPoint(IPAddress.Parse("192.168.10.179"), );
ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
string welcome = "你好!";
data = Encoding.Default.GetBytes(welcome);
ServerSocket.SendTo(data, data.Length, SocketFlags.None, ip);
Thread thread = new Thread(ReceiveData);
thread.IsBackground = true;
thread.Start();
}

2.接受数据

  /// <summary>
/// 接受消息
/// </summary>
private void ReceiveData()
{
byte[] data = new byte[];
IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, );
EndPoint remote = (EndPoint)endPoint;
while (true)
{
int len = ;
try
{
len = ServerSocket.ReceiveFrom(data, ref remote);
string str = Encoding.Default.GetString(data, , len);
string[] points = str.Split(',');
int x = int.Parse(points[]);
int y = int.Parse(points[]);
Point p = new Point(x, y);
Thread thread = new Thread(new ParameterizedThreadStart(drawPoint));
thread.IsBackground = true;
thread.Start(p);
}
catch (Exception ex)
{ }
} }

3.绘制

 /// <summary>
/// 绘制
/// </summary>
/// <param name="p"></param>
public void drawPoint(object p)
{ Point point = (Point)p;
Graphics g = this.panel1.CreateGraphics();
Pen pen = new Pen(Color.Black);
g.DrawEllipse(pen, point.X, point.Y, , );
}

源码下载: http://download.csdn.net/detail/gongchao1212/9591239

基于Socket的UDP发包程序的更多相关文章

  1. 基于socket的udp传输,socketserver模块,进程

    基于UDP的套接字 udp是无连接的,先启动哪一端都不会报错 socket.SOCK_DGRAM 数据报协议 udp不会发送空数据,什么都不输入直接发送也会有报头发过去 服务端 import sock ...

  2. 初识-----基于Socket的UDP和TCP编程及测试代码

    一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流 ...

  3. 基于Socket的UDP和TCP编程介绍

    一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流 ...

  4. 利用TCP协议,实现基于Socket的小聊天程序(初级版)

    TCP TCP (Transmission Control Protocol)属于传输层协议.其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送.可靠性.有效流控.全双工操作和多路复用 ...

  5. Android基于socket的群聊程序

    在网上看了好多,但是感觉不是太简单就是只能单独聊,所以就自己写了个可以群聊的,直接上代码了 一.服务器端 这里用的MyEclipse作为服务器端 MyServerScoket.java package ...

  6. python网络-Socket之udp编程(24)

    一.udp简介 udp --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议. udp不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地. udp在 ...

  7. 轨迹系列——Socket总结及实现基于TCP或UDP的809协议方法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在上一篇博客中我详细介绍了809协议的内容.809协议规范了通 ...

  8. 轨迹系列7——Socket总结及实现基于TCP或UDP的809协议方法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在上一篇博客中我详细介绍了809协议的内容.809协议规范了通 ...

  9. Linux网络编程:基于UDP的程序开发回顾篇

    基于无连接的UDP程序设计 同样,在开发基于UDP的应用程序时,其主要流程如下:   对于面向无连接的UDP应用程序在开发过程中服务端和客户端的操作流程基本差不多.对比面向连接的TCP程序,服务端少了 ...

随机推荐

  1. (5)html表单

    本节解说: html的表单. form * <form> 标签用于为用户输入创建 HTML 表单. 表单能够包含 input 元素,比如文本字段.复选框.单选框.提交按钮等等. * < ...

  2. STM32 使用 printf 发送数据配置方法 -- 串口 UART, JTAG SWO, JLINK RTT

    STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) http://home.eeworld.com.cn/my/space-uid-338727-blogid-47 ...

  3. 配置Outlook Anywhere2010

    防火墙只需要开放CAS的443端口,其他硬件防火墙也是如此,不需要开放其他额外端口(80也没有必要开通,如果都使用https的话) 1.CAS:服务器配置-申请证书(内部.外部CAS名称)2.CAS: ...

  4. UVA 674 Coin Change (DP)

    Suppose there are 5 types of coins: 50-cent, 25-cent, 10-cent, 5-cent, and 1-cent. We want to make c ...

  5. Cocos2d-x--开发参考资料

    1.CocoStudio使用指南 所用版本:CocoStudio v3.0.0 Cocos2d-x1.5b 自己网上查找并整理的一些资料,留下做个纪念,也希望对有需要的人有点帮助 链接地址:http: ...

  6. Python之美[从菜鸟到高手]--深刻理解原类(metaclass)

    本来想自己写这篇文章的,可当我读了这篇文章http://blog.jobbole.com/21351/,我打消了这个念头,因为肯定写的没有人家的好,说的通俗易懂,面面俱到.就厚着面皮修改下格式,测试下 ...

  7. Swift2.0 中的String(一):常用属性

    字符串算是平常用的比较多.花样也比较多的一个类型,昨天有空把相关的一些常用操作都写了一遍,总结出来.其实iOS里面的字符串更复杂,还有NSString系列等等,那些API太多将来需要用的时候再慢慢学. ...

  8. &quot;undefined reference to&quot; 问题解决方法

    近期在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似以下这种错误: (.text+0x13): undefined reference to `func' 关于undef ...

  9. xy

    用C#實現Blob數據類型 PowerBuilder提供了Blob數據類型, 用來處理二進制數據(如:圖像,文件,二進制流,文本等等). 本質上, Blob是可變長的字節數組, 它提供了一系列全局函數 ...

  10. 字典树(Trie)的java实现

    一.定义 字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:利用 ...