zoukankan      html  css  js  c++  java
  • UDP/TCP 流程与总结

    1 UDP流程

    前序:可以借助网络调试助手工具进行使用

    1 UDP 发送方

    • 1 创建UDP套接字 2 准备目标(发送方) IP和端口 3 需要发送的数据内容 4 关闭套接字

      from socket import *
      
      # 1 创建套接字
      udp_socket = socket(AF_INET, SOCK_DGRAM)
      
      # 2 准备接收方地址 IP和端口
      dest_addr = ('172.20.10.2', 8899)
      
      # 3 要发送的数据
      send_data = input("请输入你要发送的数据:")
      
      # 发送数据到指定的ip电脑上
      udp_socket.sendto(send_data.encode('utf-8'), dest_addr)
      
      # 5 关闭套接字
      udp_socket.close()
      

    2 UDP接收方

    • 1 创建udp套接字 2 绑定本地ip和端口 3 等待对方发送数据 4 关闭套接字

      from socket import *
      
      # 1 创建套接字
      udp_socket = socket(AF_INET, SOCK_DGRAM)
      
      # 2 绑定本地信息和端口 '' 会自动寻找本地ip
      local_addr = ('', 8899)
      # 绑定端口--> 这里绑定端口是因为端口会有变化
      udp_socket.bind(local_addr)
      # 3 等待接收对方发送过来的数据
      print("正在等待对方")
      
      recv_data = udp_socket.recvfrom(1024)  # 表示接收1024个字节
      
      # 4 显示数据 --> 返回的是一个元祖
      print("对方发送的数据:")
      print(recv_data[0].decode("gbk"))  # 第一个返回的是数据
      print(recv_data[1])  # 返回的是ip和端口
      
      # 5 关闭套接字
      udp_socket.close()
      
      
      

    2 TCP流程

    前序:tcp是面向连接、可靠传输的超文本传输控制协议 ,只有客户端与服务器双方通信之后,才能发送数据

    1 TCP客户端(发送方)

    • 1 创建套接字 2 连接服务器 3 发送/接收服务器数据 4 关闭套接字

      from socket import *
      
      # 1 创建TCP套接字
      tcp_client_socket = socket(AF_INET, SOCK_STREAM)
      
      # 2 连接服务器
      tcp_client_socket.connect(("172.20.10.2", 8080))  # 元祖(id, port)
      
      # 3 要发送的数据
      send_data = input("请输入要发送的数据:")
      
      # 4 向服务器发送数据
      tcp_client_socket.send(send_data.encode("utf-8"))
      
      # 5 关闭套接字
      tcp_client_socket.close()
      
      
      

    2 TCP服务器(接收方)

    • 1 创建TCP套接字 2 绑定本地ip和端口 3 开启监听模式(将主动连接套接字改为被动连接套接字) 4 等待客户端连接 5 客户端连接成功用套接字为其服务 6 先等待客户端关闭连接,然后紧接着关闭服务器套接字

      import socket
      
      # 1 创建套接字
      server_s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      
      # 2 绑定本地信息
      server_s.bind(("", 8899))
      
      # 3 将套接字设置为被动连接
      server_s.listen(128)  # 开启监听listen, 将服务器的主动连接设置为被动连接
      
      # 4 等待客户端的请求连接
      print("等待客户端连接")
      new_s, client_info = server_s.accept()
      print("客户端已连接上服务器,当前客户端的信息:", client_info)
      
      # 5 接收客服端的数据请求,向客服端发送数据
      while True:
          # 接收客服端的数据请求
          recv_content = new_s.recv(1024)
          print("客户端发送的消息:")
          print("{}>>>>{}".format(str(client_info), recv_content.decode("gbk")))
      
          # 如果没有连接
          if not recv_content:
              # 当客户端调用了close后,recv 返回值就为空,此时服务器就可以关闭连接
              new_s.close()
              break
      
      # 6 关闭监听套接字
      server_s.close()
      
      
      

    3 TCP/UDP 总结和区别

    UDP优缺点

    • UDP是一种面向无连接的通信协议,UDP 数据包括目的端口号和信息内容
    • 优点: 1 UDP传输速度快, 2 操作简单,要求的系统资源较少 3 由于UDP通讯不需要连接,因此可以实现广播发送
    • 缺点: UDP由于传送数据之前不需要与对方建立连接,对接收到的数据也不会发生确认信号,发送端也不确定数据的发送是否会正确接收,因此传输的数据不可靠

    TCP优缺点

    • TCP是面向连接的通讯协议,通讯双方需要建立三次握手建立连接、通讯完成时通过四次握手关闭连接的一种通信协议
    • 优点:TCP在数据传递时,有确认机制,窗口、超时重传、阻塞等控制机制,能够保证数据的正确性,可靠性。
    • 缺点: TCP相对于UDP传输数据速度较慢,要求的系统资源要多。

    文笔有限,如有遗漏请自行百度

    2020.6.13

    GuangHua

  • 相关阅读:
    mysql基础命令(一)
    vue组件之间的通信
    wepy的使用
    mockjs中的方法(三)
    每周散记 20181022
    api资源
    三七
    画中画 视频合成
    每周散记 20180910
    linux文件权限多一个+啥意思
  • 原文地址:https://www.cnblogs.com/kongguanghua/p/13117998.html
Copyright © 2011-2022 走看看