zoukankan      html  css  js  c++  java
  • 网络编程 UDP套接字

    第十二章 UDP套接字

    12.1 前言

    上一章讲述了TCP通信方式,它是基于流的面向连接的网络通信。UDP是IP协议上的另一种传输协议。

    TCP和UDP都是端到端的通信协议,都处于TCP/IP网络模型的第三层(传输层)。

    它和TCP的区别是:

    TCPUDP解释
    基于流 基于报文  
    有连接 无连接  
    有保障 无保障  
    效率低 效率高  
    适用稳定传输场合 适合允许报文丢失的场合  

    12.2 创建UDP socket

    int sockfd = socket(AF_INET, SOCK_DGRAM, 0);

    12.2 绑定地址

    绑定地址和TCP一样

    12.3 发送和接收

    调用的接口和TCP不一样,行为不同。TCP的发送会发生粘包情况,而UDP不会。TCP发送认为是可靠的,而UDP的发送可能会发生丢失和乱序。

    UDP的发送大部分时候使用sendto,因为send函数没有提供目标地址。如果UDP socket调用了connect函数,也可以使用send函数。

    12.4 广播和多播(组播)

    由于UDP没有连接,所以可以支持广播和多播。

    12.5 关闭socket

    使用close

    注意:

    • UDP也可以调用connect函数,但是connect函数只是让udp socket保存默认的发送地址,以便可以简单的调用send函数来发送数据。

    • UDP的数据是基于报文的,客户端调用一次send,产生一个UDP报文,接收一次只能接收一个报文。

    • 如果recv时,程序提供的缓冲区小于UDP报文长度,那么会导致数据丢失。如何得到数据报文的长度???UDP报文不要超过MTU(1400)

    • 广播时,发送端做额外设置,允许发送广播,接收端还是默认处理接口。允许发送广播socket,也可以接收数据。

    • 组播,发送端不需要额外设置,只需要发送地址改成组播地址即可。接收端加入组。

  • 相关阅读:
    ASP.NET MVC 5
    Web Components是不是Web的未来
    如何选择高性价比的控件产品
    ASP.NET MVC 5
    ubuntu系统安装
    Ubuntu linux安装完成后隐藏linux磁盘挂载点
    win10 查看本机的激活秘钥
    windows cmd下列出当前目录下的所有文件
    error LNK2005: “找到一个或多个多重定义的符号” 已经在 xxxx.obj 中定义 的解决方法
    架构设计:负载均衡层设计方案(3)——Nginx进阶
  • 原文地址:https://www.cnblogs.com/w-x-me/p/6412735.html
Copyright © 2011-2022 走看看