基于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类
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发包程序的更多相关文章
- 基于socket的udp传输,socketserver模块,进程
基于UDP的套接字 udp是无连接的,先启动哪一端都不会报错 socket.SOCK_DGRAM 数据报协议 udp不会发送空数据,什么都不输入直接发送也会有报头发过去 服务端 import sock ...
- 初识-----基于Socket的UDP和TCP编程及测试代码
一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流 ...
- 基于Socket的UDP和TCP编程介绍
一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流 ...
- 利用TCP协议,实现基于Socket的小聊天程序(初级版)
TCP TCP (Transmission Control Protocol)属于传输层协议.其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送.可靠性.有效流控.全双工操作和多路复用 ...
- Android基于socket的群聊程序
在网上看了好多,但是感觉不是太简单就是只能单独聊,所以就自己写了个可以群聊的,直接上代码了 一.服务器端 这里用的MyEclipse作为服务器端 MyServerScoket.java package ...
- python网络-Socket之udp编程(24)
一.udp简介 udp --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议. udp不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地. udp在 ...
- 轨迹系列——Socket总结及实现基于TCP或UDP的809协议方法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在上一篇博客中我详细介绍了809协议的内容.809协议规范了通 ...
- 轨迹系列7——Socket总结及实现基于TCP或UDP的809协议方法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在上一篇博客中我详细介绍了809协议的内容.809协议规范了通 ...
- Linux网络编程:基于UDP的程序开发回顾篇
基于无连接的UDP程序设计 同样,在开发基于UDP的应用程序时,其主要流程如下: 对于面向无连接的UDP应用程序在开发过程中服务端和客户端的操作流程基本差不多.对比面向连接的TCP程序,服务端少了 ...
随机推荐
- PHP 根据类名和方法名已面向对象的方式执行函数。
<?php echo 'testClass'; echo '<br><hr>'; $className = 'TestClass'; $methodName = 'c_o ...
- Oracle 触发器在日志管理开发中的应用
摘要: 本文讨论了利用数据库中的触发器对日志管理进行设计与实现的方法, 是对原来在客户端软件中编写日志管理方法的一种改进, 并给出了 Oracle9i 中的实例演示.关键词: Oracle; 触发器; ...
- android wifi总结
大致可以分为四个主要的类ScanResult wifiConfiguration WifiInfo WifiManager (1)ScanResult,主要是通过wifi 硬件的扫描来获取一些周边的w ...
- vim复制多行<转>
比如我要复制从第1行到第5行的数据,复制到第9行 光标移到第5行任意位置,输入ma光标移到第1行任意位置,输入y'a(这一定要打这个“'”单引号,否则就进入“INSERT”状态了光标移到需要复制的行, ...
- 工作一直没有进步怎么办?试试PDCA法则吧!
许多人在工作或者学习的时候,总是会发现自己过了一段时间以后,全然没有不论什么进步.或者进步很之少. 而对于每个渴望让自己变得更好的人来说.是一件很令人苦恼的事情,今天我们就来谈一下工作和学习上,可实现 ...
- 四月二十五日,bugzilla for CentOS 安装
Bugzilla for CentOS 5.4 制作人,陈浩 时间:2014.4.25 原创 文件夹 Bugzilla for CentOS 5.4 一. 装系统 1) 新建虚拟机 15G硬盘,51 ...
- Codeforces Educational Codeforces Round 3 D. Gadgets for dollars and pounds 二分,贪心
D. Gadgets for dollars and pounds 题目连接: http://www.codeforces.com/contest/609/problem/C Description ...
- phpmyadmi 上传大文件
最近自己想通过phpmyadmin上传大的文件,找了很多方法都没搞定,今天特意静下心来,终于搞定了. 需求:将480M大小的sql文件通过phpmyadmin进行导入 1.首先修改php.ini文件, ...
- Android 开发之异常处理篇(一):SDK Manager 闪退的解决方法
这个问题困扰了我很久,之前没解决,就放一放.后来我又专门拿了一个下午来找解决方法,终于搞定! 我的解决方法是修改 android.bat,直接指定java.exe所在位置,不用去调用find_java ...
- iOS-swift环形进度指示器+图片加载动画
demo.gif 如图,这个动画的是如何做的呢? 分析: 1.环形进度指示器,根据下载进度来更新它 2.扩展环,向内向外扩展这个环,中间扩展的时候,去掉这个遮盖 一.环形进度指示器 1.自定义View ...