UDP的使用

作者: 0_0啊 | 来源:发表于2017-06-01 18:37 被阅读17次

UDP客户端与服务器是无连接的,它没有TCP各种各样的算法保证数据的完整性,因此较之TCP,UDP在传输数据时少了很多开销,所以在网络信道好的情况下,它传输的效率还是挺高的。基于这个特性,很多实时视频会议系统都是使用UDP协议,因为对实时视频来说,它要求更高的实时性,丢一两个数据包反而不太重要。

UDP有三种通讯方式,单播广播以及组播:

单播

服务端要经历创建UDP套接字、绑定单播地址等操作,而客户端在创建UDP套接字后,可直接调用sendto()函数向服务器绑定的地址发送数据,服务器通过recvfrom()获取到客户端发送的数据以及地址,因为客户端只会发送一次数据,所以服务器调用recvfrom()得尽可能的快,反之,服务器也可以使用刚刚获取的客户端地址以及sendto()向客户端回复数据,客户端接收流程与服务器一样。

广播

UDP广播时会向局域网的每一个主机发送数据报,但数据报扩散范围仅限局域网,网关不会向广域网继续转发,否则会造成网络拥塞。主机广播时只需在创建UDP套接字后绑定广播地址255.255.255.255:port,即可向局域网广播数据,而客户端可从127.0.0.1:port上接收广播数据。

组播

组播类似广播,但数据只在小范围传播,不像广播那样把数据发给每一个主机,传播范围通过组播地址来约定,组播的地址范围是224.0.0.0到239.255.255.255,主机只要加入某个组播地址即可从此地址中获取到组播成员发送的数据。

structip_mreq myMreq;

bo_int32_tret = -1;

SOCKETskt = b_create_socket( AF_INET,SOCK_DGRAM,IPPROTO_UDP );

bo_uint32_tip = inet_addr("172.16.36.245"),rip;

bo_uint16_tport = htons(1234),rport;

printf("skt:%drskt:%d\n",skt,rskt);

ret= b_bind_socket( skt,0,port );

printf("bind:%d\n",ret );

myMreq.imr_multiaddr.s_addr

= inet_addr("230.1.1.1"); //加入的组

myMreq.imr_interface.s_addr

= ip; //把本机加入到这个组

//IPPROTO_IP

//SOL_IP

ret= b_setsocket_opt(skt,IPPROTO_IP,IP_ADD_MEMBERSHIP,(void*)&myMreq,sizeof(myMreq) );

printf("b_setsocket_opt:%d\n",ret );

while(1)

{

ret =b_recv_from( skt,recv_buf,sizeof(recv_buf),&rip,&rport );

if( ret > 0 )

printf( "recv ip:%d port:%dbuf:%s\n",rip,rport,recv_buf );

}

以上是加入组播,以及获取组播数据的示例代码,可以看出,程序是通过设置套接字属性加入组播组的,特别一提的是,在把本机地址加入组播时,本机地址不能填127.0.0.1,它不像广播时那样绑定本地回环地址也能收到广播数据。

相关文章

  • Centos 搭建dhcp服务器

    一、什么是DHCP dhcp是动态主机配置协议,使用udp协议,主要使用udp67和udp 68号端口 二、DHC...

  • CCNA-4;5-TCP-IP

    传输层买保险的就是TCP,不买保险的就是UDP。 UDP 使用UDP的应用NDS;SNMP;DHCP;RIP;...

  • UDP的使用

    UDP客户端与服务器是无连接的,它没有TCP各种各样的算法保证数据的完整性,因此较之TCP,UDP在传输数据时少了...

  • Socket网络编程实战(三) - Socket UDP快速入门

    1 UDP核心API讲解 Java使用DatagramSocket代表UDP协议的Socket,DatagramS...

  • DHCP服务

    使用端口:server端:udp 67端口client端: udp 68端口 定义服务使用的端口及协议的文件:/e...

  • SwiftUI Swift 网络大全之如何使用 Apple 网络

    在本文中,我将向您展示如何使用 Apple 的网络框架通过 UDP 侦听或接收消息!使用 UDP over WiF...

  • socket注意事项

    Socket TCP 和 UDP最大的区别就是:UDP 套接字没有 listen TCP 套接字使用recv()/...

  • UDP实时语音通信

    最近在做UDP实时语音通信,采用了GCDAsyncUdpSocket进行UDP传输,音频使用的是AudioUnit...

  • LWIP UDP偶发丢包问题

    RTTHREAD LWIP实现UDP通讯,使用得socket通讯偶发UDP丢包,用Wireshark监控通讯数据,...

  • 详细介绍java UDP通信

    详细介绍java UDP通信 介绍: UDP为用户数据报协议,在java中操纵UDP使用JDK中java.net包...

网友评论

    本文标题:UDP的使用

    本文链接:https://www.haomeiwen.com/subject/urwefxtx.html