基于Socket的UDP发包程序

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[1024 * 1024];
 4             int j = 1000;
 5             Random r = new Random(100);
 6             while (j >0)
 7             {
 8                 j--;
 9                 int x = r.Next(500);
10                 int y = r.Next(500);
11                 string msg = x.ToString() +","+ y.ToString();
12                 data = Encoding.Default.GetBytes(msg);
13                 for (int k = 0; 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[1024];
 4
 5             IPEndPoint ip = new IPEndPoint(IPAddress.Parse("192.168.10.179"), 50000);
 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[1024];
 7             IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 0);
 8             EndPoint remote = (EndPoint)endPoint;
 9             while (true)
10             {
11                 int len = 0;
12                 try
13                 {
14                    len = ServerSocket.ReceiveFrom(data, ref remote);
15                    string str = Encoding.Default.GetString(data, 0, len);
16                    string[] points = str.Split(‘,‘);
17                    int x = int.Parse(points[0]);
18                    int y = int.Parse(points[1]);
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
31         }

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, 5, 5);
12         }

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

时间: 2024-10-20 15:08:23

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

基于Socket的UDP和TCP编程介绍

一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流,TCP套接口是字节流套接口(streamsocket)的一种. UDP:用户数据报协议.UDP是一种无连接协议.UDP套接口是数据报套接口(datagram socket)的一种. 二.TCP和UDP介绍 1)基本TCP客户—服务器程序设计基本框架 说明:(三路握手)         1.客户端发

基于 Socket 的 UDP 和 TCP 编程介绍

基于 Socket 的 UDP 和 TCP 编程介绍 一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流,TCP套接口是字节流套接口(stream socket)的一种. UDP:用户数据报协议.UDP是一种无连接协议.UDP套接口是数据报套接口(datagram socket)的一种. 二.TCP和UDP介绍 1)基本TCP客户-服务器程序设计基本

Android基于socket的群聊程序

在网上看了好多,但是感觉不是太简单就是只能单独聊,所以就自己写了个可以群聊的,直接上代码了 一.服务器端 这里用的MyEclipse作为服务器端 MyServerScoket.java package com.scme.server; public class MyServerScoket { public static void main(String[] args) { new ServerListener().start(); } } ServerListener.java package

python网络编程基础--socket的简介,以及使用socket来搭建一个简单的udp小程序

socket介绍: socket(简称套接字),是进程间通讯的一个工具,他能实现把数据从一方传输到另一方,完成不同电脑上进程之间的通讯,它好比数据的搬运工.socket应用:不夸张来说,只要跟网络相关的应用程序或者软件都使用到了socket, 比如:微信,qq等使用socket创建udp网络程序的流程:1,创建客户端套接字2,发送/接收数据3,关闭套接字使用程序展现流程 :(使用的 ide为pycharm):1,首先创建socket,在 Python 中 使用socket 模块的函数 socke

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

基于无连接的UDP程序设计 同样,在开发基于UDP的应用程序时,其主要流程如下: 对于面向无连接的UDP应用程序在开发过程中服务端和客户端的操作流程基本差不多.对比面向连接的TCP程序,服务端少了listen和accept函数.前面我们也说过listen函数最主要的作用就是将一个socket套接字描述符转为被动监听模式,然后调用accept主要是用于等待客户端(用connect)来连接服务器.connect函数不仅可以用于流式套接字还可用于数据报式套接字.在TCP中,客户端调用connect函数

C语言 linux环境基于socket的简易即时通信程序

转载请注明出处:http://www.cnblogs.com/kevince/p/3891033.html   By Kevince 最近在看linux网络编程相关,现学现卖,就写了一个简易的C/S即时通信程序,代码如下: head.h 1 /*头文件,client和server编译时都需要使用*/ 2 #include <unistd.h> 3 #include <stdio.h> 4 #include <sys/types.h> 5 #include <sys

Java Socket实现基于TCP和UDP多线程通信

一.通过Socket实现TCP编程 1.1 TCP编程 TCP协议是面向连接,可靠的,有序的,以字节流的方式发送数据.基于TCP协议实现网络通信的类有客户端的Socket类和服务器端的ServerSocket类. 1.2 服务器端套路 1.创建ServerSocket对象,绑定监听端口. 2.通过accept()方法监听客户端请求. 3.连接建立后,通过输入流读取客户端发送的请求信息. 4.通过输出流向客户端发送响应信息. 5.关闭响应的资源. 1.3 客户端套路 1.创建Socket对象,指明

【Windows socket+IP+UDP+TCP】

Windows Socket+网络 Winsock是 Windows下套接字标准.          Winsock 编程分为UDP[Windows socket + UDP],TCP[Windows socket + TCP]编程.Windows socket 建立在网络基础之上,UDP编程采用用户数据报协议(User Datagram Protocol ,UDP),TCP编程采用传输控制协议(Transmission Control Protocol,TCP).UDP,TCP不同的特性,适应

C#基于Socket的CS模式的完整例子

基于Socket服务器端实现本例主要是建立多客户端与服务器之间的数据传输,首先设计服务器.打开VS2008,在D:\C#\ch17目录下建立名为SocketServer的Windows应用程序.打开工程,往当前窗体中添加控件,如表17-6所示.表17-6  添加控件列表 控    件 Name Text ListBox lbInfo Label label Button button1 启动服务器 设计好的界面如图17-2所示. 接下来开始运用前面的知识设计服务器,主要分为以下步骤.(1)首先是