本文章已收录于:
UDP不属于面向连接的通信,在选择使用协议的时候,选择UDP必须要谨慎。在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的ICQ和QQ就是使用的UDP协议。
我们通过UDP进行信息收发的时候,没有严格客户端和服务端的区别,它不同于UDP,UDP 必须建立可靠连接之后才可以通信,而UDP随时都可以给指定的ip和端口所对应进程发送消息。UDP发送消息时需要绑定自己IP 和 端口号,接收消息的时候没有特殊限制,只要有人给自己发送,自己在线,就可以接收。

接下来我们通过一个简单的程序看一下UDP通信的过程。
服务端程序:

[csharp] view plaincopyprint?
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Net.Sockets;
  7. using System.Net;
  8. using System.Threading;
  9. namespace UDP_Server
  10. {
  11. class Program
  12. {
  13. static Socket server;
  14. static void Main(string[] args)
  15. {
  16. server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  17. server.Bind(new IPEndPoint(IPAddress.Parse("169.254.202.67"), 6001));//绑定端口号和IP
  18. Console.WriteLine("服务端已经开启");
  19. Thread t = new Thread(ReciveMsg);//开启接收消息线程
  20. t.Start();
  21. Thread t2 = new Thread(sendMsg);//开启发送消息线程
  22. t2.Start();
  23. }
  24. /// <summary>
  25. /// 向特定ip的主机的端口发送数据报
  26. /// </summary>
  27. static void sendMsg()
  28. {
  29. EndPoint point = new IPEndPoint(IPAddress.Parse("169.254.202.67"), 6000);
  30. while (true)
  31. {
  32. string msg = Console.ReadLine();
  33. server.SendTo(Encoding.UTF8.GetBytes(msg), point);
  34. }
  35. }
  36. /// <summary>
  37. /// 接收发送给本机ip对应端口号的数据报
  38. /// </summary>
  39. static void ReciveMsg()
  40. {
  41. while (true)
  42. {
  43. EndPoint point = new IPEndPoint(IPAddress.Any, 0);//用来保存发送方的ip和端口号
  44. byte[] buffer = new byte[1024];
  45. int length = server.ReceiveFrom(buffer, ref point);//接收数据报
  46. string message = Encoding.UTF8.GetString(buffer,0,length);
  47. Console.WriteLine(point.ToString()+ message);
  48. }
  49. }
  50. }
  51. }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Net;
using System.Threading;
namespace UDP_Server
{class Program{static Socket server;static void Main(string[] args){server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);server.Bind(new IPEndPoint(IPAddress.Parse("169.254.202.67"), 6001));//绑定端口号和IPConsole.WriteLine("服务端已经开启");Thread t = new Thread(ReciveMsg);//开启接收消息线程t.Start();Thread t2 = new Thread(sendMsg);//开启发送消息线程t2.Start();}/// <summary>/// 向特定ip的主机的端口发送数据报/// </summary>static void sendMsg(){EndPoint point = new IPEndPoint(IPAddress.Parse("169.254.202.67"), 6000);while (true){string msg = Console.ReadLine();server.SendTo(Encoding.UTF8.GetBytes(msg), point);}}/// <summary>/// 接收发送给本机ip对应端口号的数据报/// </summary>static void ReciveMsg(){while (true){EndPoint point = new IPEndPoint(IPAddress.Any, 0);//用来保存发送方的ip和端口号byte[] buffer = new byte[1024];int length = server.ReceiveFrom(buffer, ref point);//接收数据报string message = Encoding.UTF8.GetString(buffer,0,length);Console.WriteLine(point.ToString()+ message);}}}
}

客户端程序:

[csharp] view plaincopyprint?
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Net;
  7. using System.Net.Sockets;
  8. using System.Threading;
  9. namespace UDP_client
  10. {
  11. class Program
  12. {
  13. static Socket client;
  14. static void Main(string[] args)
  15. {
  16. client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  17. client.Bind(new IPEndPoint(IPAddress.Parse("169.254.202.67"), 6000));
  18. Thread t = new Thread(sendMsg);
  19. t.Start();
  20. Thread t2 = new Thread(ReciveMsg);
  21. t2.Start();
  22. Console.WriteLine("客户端已经开启");
  23. }
  24. /// <summary>
  25. /// 向特定ip的主机的端口发送数据报
  26. /// </summary>
  27. static void sendMsg()
  28. {
  29. EndPoint point = new IPEndPoint(IPAddress.Parse("169.254.202.67"), 6001);
  30. while(true){
  31. string msg = Console.ReadLine();
  32. client.SendTo(Encoding.UTF8.GetBytes(msg), point);
  33. }
  34. }
  35. /// <summary>
  36. /// 接收发送给本机ip对应端口号的数据报
  37. /// </summary>
  38. static void ReciveMsg()
  39. {
  40. while (true)
  41. {
  42. EndPoint point = new IPEndPoint(IPAddress.Any, 0);//用来保存发送方的ip和端口号
  43. byte[] buffer = new byte[1024];
  44. int length = client.ReceiveFrom(buffer, ref point);//接收数据报
  45. string message = Encoding.UTF8.GetString(buffer, 0, length);
  46. Console.WriteLine(point.ToString() + message);
  47. }
  48. }
  49. }
  50. }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace UDP_client
{class Program{static Socket client;static void Main(string[] args){client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);client.Bind(new IPEndPoint(IPAddress.Parse("169.254.202.67"), 6000));Thread t = new Thread(sendMsg);t.Start();Thread t2 = new Thread(ReciveMsg);t2.Start();Console.WriteLine("客户端已经开启");}/// <summary>/// 向特定ip的主机的端口发送数据报/// </summary>static void sendMsg(){EndPoint point = new IPEndPoint(IPAddress.Parse("169.254.202.67"), 6001);while(true){string msg = Console.ReadLine();client.SendTo(Encoding.UTF8.GetBytes(msg), point);}}/// <summary>/// 接收发送给本机ip对应端口号的数据报/// </summary>static void ReciveMsg(){while (true){EndPoint point = new IPEndPoint(IPAddress.Any, 0);//用来保存发送方的ip和端口号byte[] buffer = new byte[1024];int length = client.ReceiveFrom(buffer, ref point);//接收数据报string message = Encoding.UTF8.GetString(buffer, 0, length);Console.WriteLine(point.ToString() + message);}}}
}

运行效果图:

资源下载:
http://download.csdn.net/detail/u011484013/9488304

C# 通过socket实现UDP 通信相关推荐

  1. Socket之UDP通信

    Socket之UDP通信 UDP通信原理: UDP协议是一种不可靠的网络协议,它在通信两端各自建立一个Socket对象,但是这两个Socket对象只是发送和接收数据的对象,因此基于UDP协议的通信双方 ...

  2. C# Socket之UDP通信

    Socket之间的通信可以类比生活中打电话的案例.任何用户在通话之前,首先要占有一部电话机,相当于申请一个Socket,同时要知道对方的号码,相当于对方有一个固定的Socket,然后向对方拨号呼叫,相 ...

  3. c语言广播程序,C语言socket编程---udp通信及广播

    上篇实现了TCP通信的例子.由于项目中需要一个服务器向多台客户端发送消息. 通过udp这种无连接的通信,将client.c增加一句 /* 设置通讯方式对广播,即本程序发送的一个消息,网络上所有主机均可 ...

  4. python中socket与UDP使用与通信详解

           网络层的"ip地址"可以唯一标识网络中的主机,而传输层的"协议+端口"可以唯一标识主机中的应用进程(进程).这样利用ip地址+协议+端口就可以标识 ...

  5. Qt使用UDp通信、套接字socket的成员函数bind()的作用

    一. 所谓bind,就是指绑定本地接受端口.          指定ip,是为了分辨多ip主机.在有服务端和客户端的UDP中,bind是服务端调用的函数,绑定的是服务端的IP,假设服务端有多个网卡,即 ...

  6. asp.core api 通过socket和服务器通信发送udp_python socket之TCP/UDP

    #coding=utf-8 # socket #网络中进程之间通信:网络层的"ip地址"可以唯一标识网络中的主机,而传输层的"协议+端口"可以唯一标识主机中的应 ...

  7. [python学习] 专题七.网络编程之套接字Socket、TCP和UDP通信实例

    很早以前研究过C#和C++的网络通信,参考我的文章:                  C#网络编程之Tcp实现客户端和服务器聊天                 C#网络编程之套接字编程基础知识   ...

  8. python socket模块实现udp通信_Python基于socket模块实现UDP通信功能示例

    Python基于socket模块实现UDP通信功能示例 本文实例讲述了Python基于socket模块实现UDP通信功能.分享给大家供大家参考,具体如下: 一 代码 1.接收端 import sock ...

  9. 2-3:套接字(Socket)编程之UDP通信,sockaddr,sockaddr_in,recvfrom,sendto

    文章目录 一:回顾 二:彻底了解套接字和struct socket结构 (1)一切皆文件-文件描述符-套接字描述符 (2)struct socket结构 A:struct socket结构体作用 B: ...

最新文章

  1. iis上实现虚拟目录
  2. 题目1112:拦截导弹
  3. Android自定义控件系列
  4. python网络编程—TCP协议(一)
  5. pycharm专业版(window)安装
  6. linux spring mvc tomcat配置,Spring MVC配置详解
  7. 《团队-爬取豆瓣电影TOP250-设计文档》
  8. PHP中CURL方法curl_setopt()函数的一些参数
  9. 关于bootstrap的table表显示无法找到匹配内容的问题随笔
  10. 自动化测试,面试【必备题】
  11. echarts 柱状图 横坐标文字纵向展示(超出显示...)
  12. 大数据项目实战——基于某招聘网站进行数据采集及数据分析(一)
  13. python 每周第一天和最后一天
  14. 2019年六月前端面试经验总结
  15. 回忆做嵌入式软件的几年
  16. 安装cPanelWHM 技巧
  17. 把USB打印机映射到LPT端口
  18. 做学问的三种境界(王国维)和八种境界(梁漱溟)
  19. alpha测试和beta测试
  20. 26.Nginx详解

热门文章

  1. php怎么写官网,PHP - Manual: 简介 (官方文档)
  2. 基于matlab的状态反馈与极点配置
  3. NRF24L01+ 自动重发,自动应答BUG
  4. mysql 文件组织_数据库如何组织数据?
  5. javaweb网关_Java网关服务-AIO(三)
  6. linux设置python3为默认python_Ubuntu 18.04将Python3设置为Python默认版本
  7. 女朋友心血来潮帮我清洗电脑
  8. 堆栈verilog设计实现及仿真
  9. VHDL简单微处理器的设计
  10. verilog扰码器设计及仿真