zoukankan      html  css  js  c++  java
  • 18 [网络编程]-UDP

    1.TCP VS UDP

    tcp基于链接通信

    • 基于链接,则需要listen(backlog),指定连接池的大小
    • 基于链接,必须先运行的服务端,然后客户端发起链接请求
    • 对于mac系统:如果一端断开了链接,那另外一端的链接也跟着完蛋recv将不会阻塞,收到的是空(解决方法是:服务端在收消息后加上if判断,空消息就break掉通信循环)
    • 对于windows/linux系统:如果一端断开了链接,那另外一端的链接也跟着完蛋recv将不会阻塞,收到的是空(解决方法是:服务端通信循环内加异常处理,捕捉到异常后就break掉通讯循环)

    udp无链接

    • 无链接,因而无需listen(backlog),更加没有什么连接池之说了
    • 无链接,udp的sendinto不用管是否有一个正在运行的服务端,可以己端一个劲的发消息,只不过数据丢失
    • recvfrom收的数据小于sendinto发送的数据时,在mac和linux系统上数据直接丢失,在windows系统上发送的比接收的大直接报错
    • 只有sendinto发送数据没有recvfrom收数据,数据丢失

    2、UDP普通套接字

      (1)服务端

      

      (2)客户端

       

    3、UDP通信循环

      (1)服务端

      

      (2)客户端

       

     

    4、UDP不会发生粘包现象

      相关解释:http://www.cnblogs.com/venicid/p/8679306.html#_label1

      (1)服务端

      

      

      (2)客户端

      

      

    5、应用:DNS服务器,NTP服务 ,qq都是UDP协议

    1111

  • 相关阅读:
    KMP算法的理解和代码实现
    关于线程死锁
    PAT1018
    PAT1059
    PAT1009
    PAT1006
    PAT1005
    PAT1004
    PAT1002
    PAT
  • 原文地址:https://www.cnblogs.com/venicid/p/8679581.html
Copyright © 2011-2022 走看看