C# 通过socket实现UDP 通信
UDP不属于面向连接的通信,在选择使用协议的时候,选择UDP必须要谨慎。在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的ICQ和QQ就是使用的UDP协议。
我们通过UDP进行信息收发的时候,没有严格客户端和服务端的区别,它不同于UDP,UDP 必须建立可靠连接之后才可以通信,而UDP随时都可以给指定的ip和端口所对应进程发送消息。UDP发送消息时需要绑定自己IP 和 端口号,接收消息的时候没有特殊限制,只要有人给自己发送,自己在线,就可以接收。
接下来我们通过一个简单的程序看一下UDP通信的过程。
服务端程序:
- 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));//绑定端口号和IP
- Console.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);
- }
- }
- }
- }
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);}}}
}
客户端程序:
- 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);
- }
- }
- }
- }
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 通信相关推荐
- Socket之UDP通信
Socket之UDP通信 UDP通信原理: UDP协议是一种不可靠的网络协议,它在通信两端各自建立一个Socket对象,但是这两个Socket对象只是发送和接收数据的对象,因此基于UDP协议的通信双方 ...
- C# Socket之UDP通信
Socket之间的通信可以类比生活中打电话的案例.任何用户在通话之前,首先要占有一部电话机,相当于申请一个Socket,同时要知道对方的号码,相当于对方有一个固定的Socket,然后向对方拨号呼叫,相 ...
- c语言广播程序,C语言socket编程---udp通信及广播
上篇实现了TCP通信的例子.由于项目中需要一个服务器向多台客户端发送消息. 通过udp这种无连接的通信,将client.c增加一句 /* 设置通讯方式对广播,即本程序发送的一个消息,网络上所有主机均可 ...
- python中socket与UDP使用与通信详解
网络层的"ip地址"可以唯一标识网络中的主机,而传输层的"协议+端口"可以唯一标识主机中的应用进程(进程).这样利用ip地址+协议+端口就可以标识 ...
- Qt使用UDp通信、套接字socket的成员函数bind()的作用
一. 所谓bind,就是指绑定本地接受端口. 指定ip,是为了分辨多ip主机.在有服务端和客户端的UDP中,bind是服务端调用的函数,绑定的是服务端的IP,假设服务端有多个网卡,即 ...
- asp.core api 通过socket和服务器通信发送udp_python socket之TCP/UDP
#coding=utf-8 # socket #网络中进程之间通信:网络层的"ip地址"可以唯一标识网络中的主机,而传输层的"协议+端口"可以唯一标识主机中的应 ...
- [python学习] 专题七.网络编程之套接字Socket、TCP和UDP通信实例
很早以前研究过C#和C++的网络通信,参考我的文章: C#网络编程之Tcp实现客户端和服务器聊天 C#网络编程之套接字编程基础知识 ...
- python socket模块实现udp通信_Python基于socket模块实现UDP通信功能示例
Python基于socket模块实现UDP通信功能示例 本文实例讲述了Python基于socket模块实现UDP通信功能.分享给大家供大家参考,具体如下: 一 代码 1.接收端 import sock ...
- 2-3:套接字(Socket)编程之UDP通信,sockaddr,sockaddr_in,recvfrom,sendto
文章目录 一:回顾 二:彻底了解套接字和struct socket结构 (1)一切皆文件-文件描述符-套接字描述符 (2)struct socket结构 A:struct socket结构体作用 B: ...
最新文章
- iis上实现虚拟目录
- 题目1112:拦截导弹
- Android自定义控件系列
- python网络编程—TCP协议(一)
- pycharm专业版(window)安装
- linux spring mvc tomcat配置,Spring MVC配置详解
- 《团队-爬取豆瓣电影TOP250-设计文档》
- PHP中CURL方法curl_setopt()函数的一些参数
- 关于bootstrap的table表显示无法找到匹配内容的问题随笔
- 自动化测试,面试【必备题】
- echarts 柱状图 横坐标文字纵向展示(超出显示...)
- 大数据项目实战——基于某招聘网站进行数据采集及数据分析(一)
- python 每周第一天和最后一天
- 2019年六月前端面试经验总结
- 回忆做嵌入式软件的几年
- 安装cPanelWHM 技巧
- 把USB打印机映射到LPT端口
- 做学问的三种境界(王国维)和八种境界(梁漱溟)
- alpha测试和beta测试
- 26.Nginx详解