python基础-TCP协议和UDP协议
TCP协议是一种流式协议,UDP协议是一种数据包协议。
TCP和UDP是OSI模型中传输层的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。
TCP和UDP区别总结:
| TCP | UDP | |
|---|---|---|
| 是否连接 | 面向连接 | 无连接 |
| 传输可靠性 | 可靠 | 不可靠 |
| 应用场合 | 少量数据 | 大量数据 |
| 传输速度 | 慢 | 快 |
区别补充说明:
1、TCP提供可靠的服务,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,不保证可靠交付
2、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
3、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
4、TCP首部开销20字节;UDP的首部开销小,只有8个字
python编程步骤不同
TCP编程的服务器端一般步骤是:
import socket
# 步骤二的参数
from socket import SOL_SOCKET
from socket import SO_REUSEADDR
# TCP服务端
# 1、创建socket对象,通过socket()获取
server_socket = socket.socket()
# 2、设置socket属性,导入参数,通过setsockopt() #该步骤可选
server_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
# 3、绑定IP地址、端口信息到socket对象中,通过bind(),参数是一个元组
server_socket.bind(('127.0.0.1', 9527))
# 4、开启半连接池,使用listen(),参数是整型,表示接收可等待的客户端
server_socket.listen(5)
while True:
# 5、阻塞状态,自动接收客户端的连接,通过函数accept(),返回连接对象和客户端地址
conn, client = server_socket.accept()
while True:
try:
# 6、收发数据,通过recv() 接收数据,默认参数是1024,表示每次接收数据最大字节数为1024;
re_data = conn.recv(1024).decode('utf-8')
# 获取到空数据后,重新收发数据
if len(re_data) == 0:
continue
# 获取到q后,关闭连接
if re_data == 'q':
break
print(re_data)
# send()发送数据,数据必须是bytes类型
msg = input("from server……").strip().encode('utf-8')
conn.send(msg)
except ConnectionResetError as e:
print(e)
# 7、关闭连接
conn.close()
# 8、关闭连接池
server_socket.close()
TCP编程的客户端一般步骤是:
import socket
# 步骤二的参数
from socket import SOL_SOCKET
from socket import SO_REUSEADDR
# TCP客户端
# 1、创建socket对象,通过socket()获取
client_socket = socket.socket()
# 2、设置socket属性,导入参数,通过setsockopt() #该步骤可选
client_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
# 3、设置要连接的服务端的IP地址和端口属性并连接到服务端,通过connect()
# 参数为元组,元组中第一个元素是IP地址,第二个元素是端口号
client_socket.connect(('127.0.0.1', 9527))
while True:
# 4、通过send()发送数据,数据必须是bytes类型
msg = input('from client……').strip().encode('utf-8')
client_socket.send(msg)
# 5、通过recv() 接收数据,默认参数是1024,表示每次接收数据最大字节数为1024;
re_data = client_socket.recv(1024).decode('utf-8')
if re_data == 'q':
break
print(re_data)
# 6、关闭网络连接
client_socket.close()
UDP编程的服务端一般步骤是:
import socket
# 步骤二的参数
from socket import SOL_SOCKET
from socket import SO_REUSEADDR
# UDP服务端
# 1、获取socket对象,type=-1或者1 表示socket的类型默认为SOCK_STREAM ---→ TCP
# type = 2表示socket的类型为SOCK_DGRAM ----→ UDP
server = socket.socket(type=2)
# 2、设置socket属性,导入参数,通过setsockopt() #该步骤可选
server.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
# 3、绑定服务器地址和端口
server.bind(('127.0.0.1', 9527))
# 4、循环收发数据
while True:
# 自动阻塞,等待客户端访问,接收客户端发送数据,接收使用recvfrom()
# 收到的记录是一个元组,分别是数据和地址
data, addr = server.recvfrom(1024)
re_data = data.decode('utf-8')
if len(re_data) == 0:
continue
if re_data == 'q':
break
# 打印收到的结果
print(f'client_addr:{addr},re_data:{re_data}')
# 输入发送给client的记录
msg = input('from Server to Client:').strip().encode('utf-8')
# 发送消息使用sendto,参数是二进制数据和地址
server.sendto(msg, addr)
# 5、关闭网络连接
server.close()
UDP编程的客户端一般步骤是:
import socket
# 步骤二的参数
from socket import SOL_SOCKET
from socket import SO_REUSEADDR
# UDP服务端
# 1、获取socket对象,type=-1或者1 表示socket的类型默认为SOCK_STREAM ---→ TCP
# type = 2表示socket的类型为SOCK_DGRAM ----→ UDP
client = socket.socket(type=2)
# 2、设置socket属性,导入参数,通过setsockopt() #该步骤可选
client.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
server_add = '127.0.0.1' # 服务端地址
# 3、循环收发数据
while True:
# 发送数据使用sendto(),参数是二进制数据和地址
msg = input('from_udp_client……').strip().encode('utf-8')
client.sendto(msg, (server_add, 9527))
# 接收数据使用recvfrom()
re_data, addr = client.recvfrom(1024)
if re_data.decode('utf-8') == 'q':
break
print(re_data.decode('utf-8'))
# 4、关闭连接
client.close()
python基础-TCP协议和UDP协议的更多相关文章
- python语法基础-网络编程-TCP协议和UDP协议
############### 网络编程 ############## """ 网络编程 学习了Python基础之后,包括函数,面向对象等,你就可以开发了,你 ...
- python 全栈开发,Day33(tcp协议和udp协议,互联网协议与osi模型,socket概念,套接字(socket)初使用)
先来回顾一下昨天的内容 网络编程开发架构 B/S C/S架构网卡 mac地址网段 ip地址 : 表示了一台电脑在网络中的位置 子网掩码 : ip和子网掩码按位与得到网段 网关ip : 内置在路由器中的 ...
- TCP协议和UDP协议基础介绍
TCP协议和UDP协议区别 标签(空格分隔): TCP,udp TCP的三次握手 TCP被称为可靠的数据传输协议,主要是通过许多机制来实现的其中最主要的就是三次握手的功能,当然,TCP传送数据的机制非 ...
- (1)基于tcp协议的编程模型 (2)tcp协议和udp协议的比较 (3)基于udp协议的编程模型 (4)反射机制
1.基于tcp协议的编程模型(重中之重)1.1 编程模型服务器: (1)创建ServerSocket类型的对象,并提供端口号: (2)等待客户端的连接请求,调用accept()方法: (3)使用输入输 ...
- (1)网络编程的常识 (2)基于tcp协议的编程模型 (3)tcp协议和udp协议的比较 (4)基于udp协议的编程模型
1.网络编程的常识 目前主流的网络通讯软件有:微信.QQ.YY.陌陌.探探.飞信.阿里旺旺.... 在吗? 1.1 七层网络模型(熟悉) 为了保证数据传递的可靠安全等等,ISO(国际标准委员会组织)将 ...
- 采用tcp协议和UDP协议实现简单的聊天功能
Date: 2019-06-19 Author: Sun 一. Python3输出带颜色字体 实现过程: 终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关. 转义 ...
- TCP协议和UDP协议的区别
1. TCP协议面向连接. UDP协议面向非连接 (有无链接)2. TCP协议传输速度慢. UDP协议传输速度快 (传输速度)3. TCP协议保证数据顺序. UDP协议不保证 (数据的有序性. 在IP ...
- TCP协议和UDP协议下的socket
UDP协议的服务端和客户端: ##udp_服务端 import socket udp_server = socket.socket(type=socket.SOCK_DGRAM)#选择udp协议 ip ...
- tcp协议和udp协议的使用场景
一:什么是TCP(Transmission Control Protocol,传输控制协议) tcp是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接.一个TCP连接必须要经过三次 ...
随机推荐
- Java 的 IO 流
接着上一篇的 “Java 的 File 类” 的随笔,在File类的基础上,我们就走进Java的IO流吧. 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在 ...
- 十八道JVM面试题总汇(附解析)
一.Java 类加载过程? Java 类加载需要经历以下7 个过程: 1. 加载 加载是类加载的第一个过程,在这个阶段,将完成以下三件事情: • 通过一个类的全限定名获取该类的二进制流. • 将该二进 ...
- SAP 销售订单交货对成本中心记账
销售订单发货不计入主营业务成本,而是直接接入费用科目,与成本中心挂钩的业务经常发生.不少公司只是简单地处理交货,计入主营业务成本,然后财务再手工将成本归结到相关的成本中心.其实SAP系统是支持销售订单 ...
- 从0系统学Android-2.6Activity间数据传递
本系列文章,参考<第一行代码>,作为个人笔记 更多内容:更多精品文章分类 2.3.4 向下一个 Activity 传递数据 前面学习了使用 Intent 来启动一个 Activity ,其 ...
- python中基本数据类型以及运算符
python中基本数据类型以及运算符的知识 一.与用户的交互以及python2与python的区别 1.1什么是与用户交互 用户交互就是人往计算机中input(输入数据),计算机print(输出结果) ...
- 网络编程之tcp协议以及粘包问题
网络编程tcp协议与socket以及单例的补充 一.单例补充 实现单列的几种方式 #方式一:classmethod # class Singleton: # # __instance = None # ...
- Linux iotop工具简介
iotop的简介: iotop是一款开源.免费的用来监控磁盘I/O使用状况的类似top命令的工具,iotop可以监控进程的I/O信息.它是Python语言编写的,与iostat工具比较,iostat是 ...
- docker 私有registry harbor安装
一,harbor安装: 参考:Installation and Configuration Guide 1,安装docker 2,安装docker compose sudo curl -L " ...
- 关于一道fork生成子进程的题目
题目如下: pid_t pid1,pid2; pid1=fork(); pid2=fork(); ||pid2<) { printf("Fork Failed\n"); } ...
- Docker 镜像介绍和命令
目录 是什么 UnionFS(联合文件系统) Docker镜像加载原理 分层的镜像 为什么 Docker 镜像要采用这种分层结构呢 特点 Docker镜像commit操作补充 案例演示 1.从Hub上 ...