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

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

第一种,使用Socket类

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

第二种,使用UdpClient类

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

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

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

一.服务器端

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

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

  1. private void btnStart_Click(object sender, EventArgs e)
  2. {
  3. if (serverSocket != null)
  4. {
  5. return;
  6. }
  7. IPEndPoint ip = new IPEndPoint(IPAddress.Parse(txtIP.Text), int.Parse(txtPort.Text));
  8. serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  9. serverSocket.Bind(ip);
  10.  
  11. AppendTextToTxtLog(string.Format("服务器端是{0},正在等待客户端的连接",ip.ToString()));
  12. Thread thread = new Thread(ReceiveData);
  13. thread.IsBackground = true;
  14. thread.Start();
  15.  
  16. }

3.发送数据

  1. private void SendData()
  2. {
  3. byte[] data = new byte[ * ];
  4. int j = ;
  5. Random r = new Random();
  6. while (j >)
  7. {
  8. j--;
  9. int x = r.Next();
  10. int y = r.Next();
  11. string msg = x.ToString() +","+ y.ToString();
  12. data = Encoding.Default.GetBytes(msg);
  13. for (int k = ; k < RemoteList.Count; k++)
  14. {
  15. int i = serverSocket.SendTo(data, data.Length, SocketFlags.None,RemoteList[k]);
  16. AppendTextToTxtLog(string.Format("发送给客户端{0}的消息是{1}", RemoteList[k].ToString(), msg));
  17. }
  18. }
  19. }

客户端

1.连接到服务器端

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

2.接受数据

  1. /// <summary>
  2. /// 接受消息
  3. /// </summary>
  4. private void ReceiveData()
  5. {
  6. byte[] data = new byte[];
  7. IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, );
  8. EndPoint remote = (EndPoint)endPoint;
  9. while (true)
  10. {
  11. int len = ;
  12. try
  13. {
  14. len = ServerSocket.ReceiveFrom(data, ref remote);
  15. string str = Encoding.Default.GetString(data, , len);
  16. string[] points = str.Split(',');
  17. int x = int.Parse(points[]);
  18. int y = int.Parse(points[]);
  19. Point p = new Point(x, y);
  20. Thread thread = new Thread(new ParameterizedThreadStart(drawPoint));
  21. thread.IsBackground = true;
  22. thread.Start(p);
  23. }
  24. catch (Exception ex)
  25. {
  26.  
  27. }
  28. }
  29.  
  30. }

3.绘制

  1. /// <summary>
  2. /// 绘制
  3. /// </summary>
  4. /// <param name="p"></param>
  5. public void drawPoint(object p)
  6. {
  7.  
  8. Point point = (Point)p;
  9. Graphics g = this.panel1.CreateGraphics();
  10. Pen pen = new Pen(Color.Black);
  11. g.DrawEllipse(pen, point.X, point.Y, , );
  12. }

源码下载: 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. Tair分布式key/value存储

    [http://www.lvtao.net/database/tair.html](特别详细)   tair 是淘宝自己开发的一个分布式 key/value 存储引擎. tair 分为持久化和非持久化 ...

  2. 如何提高数据库update更新的速度

    不用不知道,一用吓一跳..看下面这条SQL语句 String sql="update cats set name_alias='"+rs.getString(1)+"'w ...

  3. Hello OSGI --- Apache Felix

    Apache Felix Felix是一个OSGi版本4规范的Apache实现. OSGi是一个基于Java的服务平台规范,其目标是被需要长时间运行.动态更新.对运行环境破坏最小化的系统所使用.有许多 ...

  4. c# 轻量级 ORM 框架 之 DBHelper 实现 (三)

    周末了比较清闲,把自己的orm框架整理了下,开源了. 已经做出来的东西通常感觉有些简单,一些新手或许听到"框架"一类的词觉得有些"高深",简单来说orm就是把a ...

  5. Codeforces Educational Codeforces Round 3 C. Load Balancing 贪心

    C. Load Balancing 题目连接: http://www.codeforces.com/contest/609/problem/C Description In the school co ...

  6. Codeforces Round #221 (Div. 1) B. Maximum Submatrix 2 dp排序

    B. Maximum Submatrix 2 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset ...

  7. GLSL实现Interactive Fluid 流体【转】

    http://blog.csdn.net/a3070173/archive/2008/12/08/3479477.aspx 完成的部分: 1.流体本身的绘制和更新 未解决的部分: 1.由于采用经过抖动 ...

  8. JavaScript Modules

    One of the first challenges developers new to JavaScript who are building large applications will ha ...

  9. 淘宝 印风 UDF

    http://blog.csdn.net/zhaiwx1987/article/details/6902623

  10. windows下查看某个端口被哪个程序占用的方法

    经常,我们在启动应用的时候发现系统需要的端口被别的程序占用,如何知道谁占有了我们需要的端口,很多人都比较头疼,下面就介绍一种非常简单的方法,希望对大家有用 假如我们需要确定谁占用了我们的9050端口 ...