【python网络编程】TCP与UDP的区别

TCP (传输控制协议)和 UDP 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议。 TCP是一种面向广域网的通信协议,目的是在跨越多个网络通信时,为两个通信端点之间提供一条具有下列特点的通信方式: (1)基于流的方式; (2)面向连接; (3)可靠通信方式; (4)在网络... 阅读详情

TCP(Transmission Control Protocol)简称传输控制协议,它是一种面向连接的、可靠的、基于字节流的传输层通信协议。

创建TCP通信三个步骤:

  1. 创建连接
  2. 数据传送
  3. 终止连接

TCP通信类似于生活中的打电话,通信开始前一定要先建立相关的连接。

TCP特点:

  1. 面向连接 这种连接是一对一的,因此TCP不适用于广播的应用程序
  2. 可靠传输
    1. TCP采用应答机制
    2. 超时重传
    3. 错误校验
    4. 流量控制和阻塞管理

TCP优点:

  • 可靠、稳定
  • 适合传输大量数据

TCP缺点:

  • 传输速度慢
  • 占用系统资源高

TCP的使用场景

对网络通讯质量有较高要求

  • 浏览器 HTTP协议基于TCP协议
  • 文件传输

TCP的三次握手(连接)

TCP的4次挥手(断开)

TCP网络程序流程

案例 基于TCP的文件下载器(同步下载)

TCP严格区分客户端与服务端。

TCP客户端

import socket

if __name__ == '__main__':
    # 创建tcp客户端套接字
    tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 和服务端程序建立连接
    tcp_client_socket.connect(("127.0.0.1", 8989))
    # 接收用户下载的文件名数据
    file_name = input("请输入您要下载的文件名:")
    # 对字符串进程编码成为二进制数据
    file_name_data = file_name.encode("utf-8")
    # 发送数据
    tcp_client_socket.send(file_name_data)

    # 指定路径,先把文件创建到指定路径,然后在打开文件写入数据
    with open("/home/python/Desktop/" + file_name, "wb") as file:

        # 循环接收服务端发送的文件二进制数据
        while True:
            # 接收一次服务端发送的数据
            file_data = tcp_client_socket.recv(1024)
            if file_data:
                # 循环往文件中写入数据
                file.write(file_data)
            else:
                # 服务端发送文件完成
                break

    # 关闭套接字
    tcp_client_socket.close()

TCP服务端

import socket
import os


if __name__ == '__main__':
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 设置socket选项,程序退出端口号立即释放, 可以复用端口号
    # 提示: 默认是 tcp断开连接,但真正释放端口号需要等待1-2分钟
    tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,True)
    # 给程序绑定端口号
    tcp_server_socket.bind(("", 8989))
    # 设置监听
    tcp_server_socket.listen(128)
    # 循环等待接收客户端的连接请求,可以服务与多个客户端, 但是是一个客户端下载文件以后另外一个客户端才能下载文件
    while True:
        # 等待接收客户端的连接请求
        service_client_socket, ip_port = tcp_server_socket.accept()
        # 代码执行到此,说明连接建立成功
        print("客户端的ip地址和端口号:", ip_port)
        # 接收客户端请求数据(其实就是客户端发送的文件名)
        recv_data = service_client_socket.recv(1024)
        # 对二进制数据进行解码
        file_name = recv_data.decode("utf-8")
        print(file_name)

        # 判断请求的文件是否存在
        # 1. try-except 如果打开文件出现异常,说明文件不存在
        # 2. os.path.exits 判断文件是否存在
        # 判断指定文件或者文件夹是否存在
        if os.path.exists(file_name):
            # 根据客户端请求文件名打开指定文件,读取文件中的数据
            with open(file_name, "rb") as file:  
                while True:
                    # 读取文件数据
                    file_data = file.read(1024)
                    if file_data:
                        # 发送数据给客户端
                        service_client_socket.send(file_data)
                    else:
                        # 文件读取完成
                        break
        else:
            service_client_socket.send("无此文件".encode("utf-8")
        service_client_socket.close()
    # tcp_server_socket.close()

TCP注意点:

  1. tcp服务器一般情况下都需要绑定端口号,否则客户端找不到这个服务器
  2. tcp客户端一般不绑定端口号,使用随机生成的端口号即可
  3. 当一个tcp客户端和服务端连接成功后,服务器端会有1个新的套接字,这个套接字用来标记这个客户端,单独为这个客户端服务
  4. listen后的套接字是被动套接字,只用来接收新的客户端的链接请求的,而accept返回的新套接字是标记这个新客户端的
  5. 关闭listen后的套接字意味着被动套接字关闭了,会导致新的客户端不能够连接服务器,但是之前已经连接成功的客户端正常通信
  6. 关闭accept返回的套接字意味着这个客户端已经服务完毕,注意和第5点的区别
  7. 当客户端的套接字调用close后,服务器端会recv解堵塞,并且返回的长度为0,因此服务器可以通过返回数据的长度来区别客户端是否已经下线

TCP和UDP的区别

  1. TCP面向连接,UDP不面向连接
  2. TCP需要连接 传输速度慢,UDP不需要连接 传输速度快
  3. TCP不支持发广播,UDP支持发广播
  4. TCP对系统资源要求较多,UDP对系统资源要求较少
  5. TCP提供可靠的数据传输,UDP不保证可靠的数据传输,易出现丢包情况
  6. TCP适合发送大量数据,UDP适合发送少量数据
  7. TCP有流量控制,UDP没有流量控制

如果对Python感兴趣的话,可以试试我整理的这份Python全套学习资料,文末免费领取

😝朋友们如果有需要的话,可以V扫描下方二维码免费领取🆓

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

#### **一、Python学习路线**

image-20230619144606466

python学习路线图1

二、Python基础学习
1. 开发工具

2. 学习笔记

在这里插入图片描述

3. 学习视频

在这里插入图片描述

三、Python小白必备手册

图片

四、数据分析全套资源

在这里插入图片描述

五、Python面试集锦
1. 面试资料

在这里插入图片描述

在这里插入图片描述

2. 简历模板

在这里插入图片描述

** 因篇幅有限,仅展示部分资料,添加上方即可获取**
python的入门TCP编程 一、创建TCP服务器 创建TCP服务器的流程: 使用socket创建一个套接字 使用bind绑定IP和端口 使用listen让套接字变成可以被动连接 使用accept等待客户端的连接 使用recv/send接收和发送数据 例子:我们实现一个服务器向浏览器发送“Hello World”。 创建一个server.py文件 import socket #导入socket模块 host = '127.0.0.1' #主机IP port = 8080 #端口 web 阅读详情

相关推荐

python 网络篇(网络编程)

你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分别去运行,你就会发现,这两个python的文件分别运行的很好。但是如果这两个程序之间想要传递一个数据,你要怎么做呢?这个问题以你现在的知识就可以解决了,我们可以创建一个文件,把a.py想要传递的内容写到文件中,然后b.py从这个文件中读取内容就可以了。但是当你的a.py和b.py分别在不同电脑上的时候,你要怎么办呢?类似的机制有计算机网盘,qq等等。

R5463995的博客 1864

Python网络编程之TCP编程

Python网络编程之TCP编程,创建一个属于我们自己的聊天室吧(一起努力,咱们顶峰相见!!!)

精益求精,永无止境,永远在路上! 4160

Scratch(四十一):升级版垃圾分类

哈喽,大家好!之前给大家展示过“Scratch(二十四):垃圾分类”。今天呢,给大家展示的Scratch是`升级版垃圾分类`。接下来,我们一起看一下效果吧。

我可以很大侠的博客 6868

python网络编程—TCP协议(一)

客户端发送请求,用send不用sendto,客户端知道服务器的ip和端口,服务器也知道客户端的端口和ip,因为是面向连接的。等待客户端的连接请求,当前函数是线程阻塞的函数,accept返回2个值,第一个:新的socket,第二个:客户端地址,创建目标服务器,绑定一个IP和端口 服务器里面空的字符串代表server_socket绑定这台机器下的任何ip地址。新创建的socket是server_socket中的子socket,只是和当前的客户端(一个客户端)收发数据。

python全栈 4914

DM-VIO论文精读:从‘延迟边缘化’到‘位姿图BA’,手把手拆解单目VIO性能超越双目的秘密

本文深入解析DM-VIO技术如何通过延迟边缘化和位姿图BA创新,解决单目视觉惯性里程计(VIO)的尺度不可观性问题,并在精度上超越传统双目系统。文章详细介绍了延迟边缘化的双因子图结构设计、位姿图BA的多级初始化策略,以及系统级优化带来的性能提升,为VIO研究与实践提供了重要参考。

weixin_30616969的博客 427

【UV打印机】PrintExp打印软件教程(六)-高级模式(马达)

输入高级模式密码进入高级模式高级模式界面有操作栏、控制栏、参数栏及参数界面操作栏名称功能说明文件加载数据从板卡加载参数保存将参数保存到主板退出退出高级模式固件导入固件导入配套版本下的固件配置*xpcfx导出固件导出当前使用的固件配置*xpcfx导入波形文件导入对应的波形文件*waf操作初始化系统继续初始化动作复位X轴复位回原点控制栏可进行小车运动、闪喷操作(此闪喷为点击进行闪喷,不受平台位置限制),无清洗功能。

Print World的专栏 3112

Python网络编程之TCP

TCP协议,传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义。TCP通信需要经过创建连接、数据传送、终止连接三个步骤。正在上传…重新上传取消TCP通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据。

AI创世纪的博客 3880

高通410刷OpenWRT后网络共享配置全攻略

本文详细解析了在高通410设备刷入OpenWRT后,因基带文件丢失导致无法上网的常见问题。核心解决方案是通过SMB网络共享,将备份的原厂基带文件传输至OpenWRT系统并正确还原,从而恢复移动网络连接。文章提供了从备份基带、刷机到配置共享和文件替换的完整操作指南。

grafana6viz的博客 572

Python网络编程——TCP编程和UDP编程的使用、区别(附实例)

一、网络编程 计算机网络是把各个计算机连接到一起,让网络中的计算机可以互相通信。网络编程就是如何在程序中实现两台计算机的通信。 举个例子,当你使用浏览器访问新浪网时,你的计算机就和新浪的某台服务器通过互联网连接起来了,然后,新浪的服务器把网页内容作为数据通过互联网传输到你的电脑上。 由于你的电脑上可能不止浏览器,还有QQ、Skype、Drop...

浅浅的博客 1228

《点亮创新灯塔!AI应用架构师与中小学初等教育AI智能体,共筑智能化教育辅助创新灯塔》

中小学AI智能体,是基于AI技术,能感知教育场景、理解教育规律、辅助教师教学和学生学习的智能系统。做老师“做不了”的事:比如5分钟批改45本作业,精准统计每个学生的易错点;做老师“做不好”的事:比如根据学生的学习风格(视觉/听觉/动觉)推荐个性化内容;绝不做老师“该做的事”:比如情感交流、价值观引导、创意教学设计——这些“人的温度”,AI永远无法替代。我是林宇,资深AI应用架构师,专注教育AI领域8年,参与过10多个中小学AI智能体项目,曾为北京、上海、深圳等城市的100多所学校提供AI教育解决方案。

Java大师兄的博客 433

Dify工作流构建案例:迭代驱动的多维深度搜索

为了克服这些挑战,我们可以设计一个能够智能协同内部知识库与外部互联网搜索,并最终由大型语言模型(LLM)进行深度整合与精准回答的高级工作流。

同名公众号:dify实验室 2291

python精选21集 网络编程(TCP、UDP套接字编程、区别)

文章目录python精选21集 网络编程一.socket套接字编程(TCP)1.套接字2.tcp套接字2.1tcp客户端与服务端总流程图2.2服务端流程图<1> 创建套接字<2>绑定地址<3>设置监听<4>等待处理客户端连接请求<5>消息收发<6>关闭套接字2.3客户端流程图<1>创建套接字<2>请求连接<3>收发消息<4>关闭套接字Demo【TCP客户端与服务端】2.4 tcp 套接字数

weixin_38640052的博客 672

DeepSeek邮件管理全攻略

DeepSeek邮件助手是一款高效的邮件处理工具,提供智能分类、撰写、回复和任务自动化功能。通过API调用或多智能体系统,它能自动分类邮件意图、生成专业回复并优化邮件内容。核心功能包括智能过滤、会议安排和任务提醒,支持与主流邮箱服务集成。提供精准提示词模板,帮助用户快速生成得体邮件,提升工作效率。适合个人和企业使用,通过简单配置即可实现邮件处理自动化。

Genio_Wang的博客 180

python网络编程 TCP协议 TCP与UDP的区别

TCP(Transmission Control Protocol)简称传输控制协议,它是一种面向连接的、可靠的、基于字节流的传输层通信协议。 创建TCP通信三个步骤: 创建连接 数据传送 终止连接 TCP通信类似于生活中的打电话,通信开始前一定要先建立相关的连接。 TCP特点: 面向连接  这种连接是一对一的,因此TCP不适用于广播的应用程序 可靠传输 TCP采用应答机制 超...

二月的博客 879

Vue3 - 实现内网使用天地图离线地图,详解项目加载天地图的离线地图服务器部署与使用教程示例源码,vue3如何实现天地图的离线加载部署在内网访问(天地图资源下载/瓦片等流程教学,实现天地图各种功能)

Vue3中加载天地图的离线地图,天地图——内网使用离线地图,vue3+leaflet实现天地图离线访问,vue3项目中利用leaflet使用天地图,vue3项目中使用天地图离线地图,天地图离线瓦片的打包与发布(GeoServer)天地图离线瓦片数据下载及本地化部署,在内网中无法直接使用外网天地图资源怎么办,在vue3中openLayers加载地图 -使用天地图的瓦片数据。VUE3天地图离线怎么使用,内网部署天地图,天地图离线瓦片,部分瓦片数据,天地图如何离线,无需网络调用天地图API,vue天地图离线地图,

🏆 前端领域优质创作者 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

15.Python网络编程:进程池、进程间通信、多线程、进程和线程区别、网络通信、端口、IP地址、socket、UDP、TCP、http

进程池:multiprocessing.Pool 用于管理和复用多个进程,适合并行计算。 进程间通信:通过 Queue 或 Pipe 进行数据交换。 多线程:通过 threading 模块实现多线程编程,适用于 I/O 密集型任务。 进程与线程区别:进程有独立的内存空间,线程共享内存,进程适合 CPU 密集型任务,线程适合 I/O 密集型任务。 网络通信:通过 socket 实现客户端和服务器通信,支持 TCP、UDP、HTTP 协议。 TCP:面向连接的协议,保证数据传输的可靠性。 UDP:无连接协议,适

DataCrafter的博客 1904

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Python网络编程中TCP和UDP的区别(1ni)

直接上代码(参考Python爬虫开发与项目实战)服务端:# *_*coding:utf-8 *_* """ TCP通信需要一个建立可靠连接的过程,而且通信双方以流的形式发送数据。相对于TCP,UDP则是面向无连接的协议。 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包,但是不关心能够到达 目的端。虽然用UDP传输数据不可靠,但是由于它...

1ni 372

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

基于Tcp和UDP的python网络编程案例详解

文章目录TCP和UDP网络编程1.通信协议介绍2.TCP协议和UDP协议3.Socket(套接字)4.TCP简单网络编程5.UDP简单网络编程 TCP和UDP网络编程 1.通信协议介绍 (1)定义:网络通信协议是一种网络通用语言,为连接不同操作系统和不同硬件体系结构的互联网络引提供通信支持,是一种网络通用语言。 (2)网络通信协议由三个要素组成。 语义,解释控制信息每个部分的意义。它规定了需要发出何种控制信息,以及完成的动作与做出什么样的响应。 语法,用户数据与控制信息的结构与格式,以及数据出现的顺序。 时

qq_44176343的博客 1273

python网络编程学习笔记(2)--TCP和UDP区别(补充)

1: 面向报文 面向报文的传输方式是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。因此,应用程序必须选择合适大小的报文。若报文太长,则IP层需要分片,降低效率。若太短,会是IP太小。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。这也就是说,应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。 2: 面向字节流 面向字节流

vinsuan93的专栏 592

Python网络编程

Socket(套接字)是计算机网络中进程间通信的一种工具,用于实现不同设备或同一设备上不同进程之间的数据传输。它是操作系统提供的网络编程接口,本质上是一个抽象的端点,可以看作是两个程序之间通信链路的 “端点”。在 TCP/IP 协议模型中,Socket 通过IP 地址(标识网络中的设备)和端口号(标识设备上的进程)唯一确定一个通信端点。例如,客户端通过连接服务器的 IP 地址和端口号,建立 Socket 连接,从而实现数据交互。Socket 的核心作用是实现不同主机或进程之间的双向通信,

2401_88768957的博客 1139

python中UDP基于套接字编程,并发的TCP与UDP编程,TCP与UDP的差异。

菩提本无根,明镜亦非台 基于UDP协议的套接字通信: 1.UDP是无连接的,先启动那一端都不会报错。 UDP服务端: ss = socket() #创建一个服务器的套接字 ss.bind() #绑定服务器套接字 inf_loop: #服务器无限循环 cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送) ss.close() # 关闭服务器套接字 UDP客户端: cs = socket()

零基础学习Python的博客 432

Python网络编程基础

网络编程介绍 网络通信其实就是两台计算机上的两个进程之间的通信。 例如通过浏览器访问百度,就是浏览器进程和百度服务器的某个进程之间进行网络通信。 网络通信需要遵守一定的规则也就是网络协议,互联网协议包含了上百种协议标准,但是最重要的两个协议是TCP和IP协议,所以,大家把互联网的协议简称TCP/IP协议。 通信双方必须知道对方的标识,也就是互联网上每个计算机的唯一标识即IP地址。但是一台计算机可以同时接入多个网络,即多网卡,所以IP地址对应的实际上是计算机的网络接口。 IP协议负责把数据按块分割并以块为单位

patrick_big_data的博客 2089

【Python网络编程】TCP和UDP的使用(附实例)

Socket又称 ‘套接字’,是网络编程的一个抽象概念。通常我们用一个Socket表示 ‘打开了一个网络链接’,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可。应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。

2201_75362610的博客 1670

Python网络编程——TCP与UDP

Python网络编程 TCP(复杂可靠)与UDP(简单不可靠)的区别 1) TCP提供面向连接的传输,通信前要先建立连接(三次握手机制); UDP提供无连接的传输,通信前不需要建立连接。 2) TCP提供可靠的传输(有序,无差错,不丢失,不重复); UDP提供不可靠的传输。 3) TCP面向字节流的传输,因此它能将信息分割成组,并在接收端将其重组; UDP是面向数据报的传输,没有分组开销。 4) TCP提供拥塞控制和流量控制机制; UDP不提供拥塞控制和流量控制机制。 windows 下查看IP地址方法

梦码城博客中心 450

第十二章 网络编程

通信协议协议即规则,就好比汽车上路要遵守交通规则一样,为了使全世界不同类型的计算机都可以连接起来,所以制定了一套全球通用的通信协议——Internet协议。有了Internet协议,任何私有网络,只要支持这个协议,就可以接入互联网。Internet协议主要的协议和层次关系:IPipconfig。

记录学习过程中的笔记 949
上一篇: 总结7个我所知道的Python副业赚钱的渠道
下一篇: Python工程师常见的30个基础面试题
大模型应用场景
博客等级 码龄5年 7648粉丝 1350原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值