udp不属于面向连接的通信,在选择协议时,选择udp必须要谨慎。在网络质量较差情况下,udp协议数据包丢失会比较严重。但是由于udp的特性:它不属于连接型协议,具有资源消耗小,处理速度快等优点,所以通常音视频和普通数据在传送时使用udp较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。
通过udp进行信息收发,并没有严格的客户端和服务端之分,它不同于tcp,tcp必须建立可靠连接之后才可以通信,而udp随时都可以给指定的ip和端口所对应进程发送消息。
udp发送消息时需要绑定自己ip 和 端口号,接收消息的时候没有特殊限制,只要有人给自己发送,自己在线,就可以接收。
总之,使用udp协议进行信息的传输之前不需要建立连接。换句话说就是客户端向服务器发送信息,客户端只需要给出服务器的ip地址和端口号,然后将信息封装到一个待发送的报文中并且发送出去。至于服务器端是否存在,或者能否收到该报文,客户端根本不用管。
server服务端实现代码
using system;
using system.net;
using system.net.sockets;
using system.text;
using system.threading;
namespace udpserver
{
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(192.168.1.101), 8001)); //绑定端口号和ip
thread threadrecivemsg = new thread(recivemsg); //开启接收消息线程
threadrecivemsg.start();
thread threadsendmsg = new thread(sendmsg); //开启发送消息线程
threadsendmsg.start();
console.writeline(服务端已开启);
}
///
/// 向指定ip的主机端口发送数据报
///
static void sendmsg()
{
endpoint point = new ipendpoint(ipaddress.parse(192.168.1.101), 8000);
while (true)
{
string msg = console.readline();
server.sendto(encoding.utf8.getbytes(msg), point);
}
}
///
/// 接收发送给本机ip对应端口号的数据报
///
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(datetime.now.tostring() + msg from: + point.tostring() + : + message);
}
}
}
}
编码器与plc的接线图
诺基亚Open RAN成功完成兼容性测试
面板领域大动作不断 产能将继续维持高增长态势
贴片电容Y5V的使用方法以及常见应用场景
6月国内动力电池榜公布!
UDP不属于面向连接的通信
输电线路图像视频监测装置运用了哪些技术?
高速CAN总线和低速CAN总线两者的特性和区别
智能家居厂商走进自嗨式营销怪圈 过于急功近利炒作大概念
IPOSIM的今昔——从器件级的计算到基于系统的仿真
优必选成功上市 成为人形机器人第一股
微雪电子RK3308主板CCMaskRom模式简介
高通与OPPO、vivo、小米等达成合作 5G手机明年有望推出
朝鲜自主研制出三款计算机
盘点我国工业软件技术创新与应用发展现状
光学薄膜污点检测仪的原理及功能的介绍
2020年智能穿戴创新材料与应用高峰论坛将于12月19日在深圳召开
用AI创造更多价值 中国将在AI领域与美国齐头并进
NVIDIA研究人员创建可以疏通计算机网络拥堵的AI模型
华为开始加快涉入机器人行业