Linux 网络开发必学课程(七)UDP 数据收发实战、深入UDP 数据收发

本文深入探讨了UDP协议,介绍了UDP与IP的区别,讲解了UDP数据的收发,包括一对一、一对多的通信模式,重点讨论了广播和多播的应用,如DHCP服务,并给出了实际的编程实验示例。
摘要由CSDN通过智能技术生成

15UDP 数据收发实战

① 再论UDP协议

  • UDP是无连接的(不可靠的,无应答消息,数据包无序号标识)
  • UDP是面向数据包的,对应用层数据既不合并也不拆分(保留数据包边界,不粘包)
  • UDP没有拥塞控制,网络出现的拥塞不会使源主机的发送速率降低
  • UDP支持一对一、一对多、多对一和多对多的交互通信
  • UDP消息头开销小,只有8个字节(TCP消息头共20个字节)
  • UDP相比较TCP更高效,牺牲效率

        

UDPIP的区别

  • UDP是建立于IP之上的数据传输协议
    • IP负责将UDP数据包从源主机传输到目标主机
    • UDP则将应用层数据投递到目标socket(端口号)socket和端口号通过bind函数绑定
  • UDP几乎完整“继承”了IP传输的特性(不能缺少传输层,UDP应运而生)
    • 通信两端无交互,无流控,无超时重发,不具备可靠性
    • ····应用层(应用数据) ==> 传输层(TCP(深度定制)、UDP(轻度定制)) ==> IP层(IP)

UDP数据收发

        

        

 UDP编程模式

        

UDP数据收发

⑥ 编程实验:UDP数据收发

client.c

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>

int main()
{
    int sock = 0;
    struct sockaddr_in addr = {0};
    struct sockaddr_in remote = {0};
    int len = 0;
    char buf[128] = {0};
    char input[32] = {0};
    int r = 0;

    sock = socket(PF_INET, SOCK_DGRAM, 0);

    if( sock == -1 )
    {
        printf("socket error\n");
        return -1;
    }

    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = htonl(INADDR_ANY);
    addr.sin_port = htons(9999);

    if( bind(sock, (struct sockaddr*)&addr, sizeof(addr)) == -1 )
    {
        printf("udp bind error\n");
   
  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值