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

UDP/TCP 流程与总结的更多相关文章

  1. udp/tcp流程

    udp: 1.创建套接字 socket 2.绑定本地ip/port bind 3.收发数据 sendto/recvfrom 4.关闭套接字 close tcp客户端: 1.创建套接字 socket 2 ...

  2. Python复习笔记(六)网络编程(udp/tcp)

    一.网络-udp(用户数据报协议) 用户数据报协议 类似写信,不安全,数据有可能丢 1.1 ip地址 注意: IP地址127.0.0.1 ~ 127.255.255.255 用于回路测试 私有ip地址 ...

  3. socket 网络编程高速入门(一)教你编写基于UDP/TCP的服务(client)通信

    由于UNIX和Win的socket大同小异,为了方便和大众化,这里先介绍Winsock编程. socket 网络编程的难点在入门的时候就是对基本函数的了解和使用,由于这些函数的结构往往比較复杂,參数大 ...

  4. [转]UDP/TCP穿越NAT的P2P通信方法研究(UDP/TCP打洞 Hole Punching)

     [转]UDP/TCP穿越NAT的P2P通信方法研究(UDP/TCP打洞 Hole Punching) http://www.360doc.com/content/12/0428/17/6187784 ...

  5. 如何计算UDP/TCP检验和checksum

    如何计算UDP/TCP检验和checksum 一.下面的图是一个UDP的检验和所需要用到的所有信息,包括三个部分:1.UDP伪首部2.UDP首部3.UDP的数据部分(切记不要遗漏该部分,否则就~吐血了 ...

  6. 【Windows socket+IP+UDP+TCP】网络基础

    Windows Socket+网络      Winsock是 Windows下套接字标准.          Winsock 编程分为UDP[Windows socket + UDP],TCP[Wi ...

  7. 计算机网络基础笔记 运输层协议UDP/TCP

    目录 UDP 首部结构 主要特点 TCP 首部结构 主要特点 TCP 可靠性实现 停止等待ARQ协议 连续ARQ协议&滑动窗口协议 拥塞控制 TCP 运输连接管理 连接建立:三次握手 连接释放 ...

  8. Python Socket Programming UDP/TCP

    基于UDP/TCP的套接字编程demo UDP 客户端/服务器 一个简单的基于UDP协议的客户端和服务器应用的进程通信. 逻辑: 客户端会给服务器发送小写的英文字母,服务器接受后,把它转化成大写再返回 ...

  9. linux中c语言和php语言通信代码UDP&TCP

    linux中c语言和php语言通信代码UDP&TCP http://blog.chinaunix.net/uid-24015214-id-2644174.html UDP方式通信   服务器端 ...

随机推荐

  1. zabbix 邮箱告警

    脚本内容 #!/bin/env python #coding:utf- import smtplib from email.mime.text import MIMEText from sys imp ...

  2. Vue中解决新脚手架3创建项目的移动端双击屏幕放大,双手拉动放大的方法

    替换新版vue-cli创建项目的public>index.html <!DOCTYPE html> <html lang="en"> <head ...

  3. VMware15 镜像Centos7修改静态IP

    VMware15 镜像Centos7修改静态IP * 我的网卡名称为ens33: * 配置IP在 /etc/sysconfig/network-scripts/ifcfg-ens33 目录下: * D ...

  4. 120行代码打造.netcore生产力工具-小而美的后台异步组件

    相信绝大部分开发者都接触过用户注册的流程,通常情况下大概的流程如下所示: 接收用户提交注册信息 持久化注册信息(数据库+redis) 发送注册成功短信(邮件) 写操作日志(可选) 伪代码如下: pub ...

  5. python2.7 函数的参数学习

    1.默认参数 默认参数可以简化函数的调用. 设置默认参数时,有几点要注意: 一.必选参数在前,默认参数在后,否则Python的解释器会报错. 二.当函数有多个参数时,把变化大的参数放前面,变化小的参数 ...

  6. 【JAVA进阶架构师指南】之五:JVM性能调优

    前言   首先给大家说声对不起,最近属实太忙了,白天上班,晚上加班,回家还要收拾家里,基本每天做完所有事儿都是凌晨一两点了,没有精力再搞其他的了.   好了,进入正题,让我们来聊聊JVM篇最后一个章节 ...

  7. java并发编程 --并发问题的根源及主要解决方法

    目录 并发问题的根源在哪 缓存导致的可见性 线程切换带来的原子性 编译器优化带来的有序性 主要解决办法 避免共享 Immutability(不变性) 管程及其他工具 并发问题的根源在哪 首先,我们要知 ...

  8. STM32单片机应用与全案例实践 /stm32自学笔记 第二版 pdf

    STM32单片机应用与全案例实践pdf https://pan.baidu.com/s/16WrivuLcHvLTwS__Zcwl6Q 4rj3 stm32自学笔记 第二版 pdf https://p ...

  9. 线程基础9-quene讲解

    在学习Java 多线程并发开发过程中,了解到DelayQueue类的主要作用:是一个无界的BlockingQueue,用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走. ...

  10. SQL注入之MySQL常用的查询语句

    MySQL是一种使用很广的数据库,大部分网站都是用MySQL,所以熟悉对MySQL数据库的注入很重要. 首先来说下MySQL注入的相关知识点 在MySQL5.0版本之后,MySQL默认在数据库存放一个 ...