Python网络协议socket

01 协议基础

01 网络协议

协议:一种规则

网络协议:网络规则,一种在网络通信中的数据包的数据规则

02 TCP/IP协议

osi模型

image-20210525225559149

tcp/ip协议

image-20210525230256207

03 tcp协议

TCP协议提供了一种端到端的、基于连接的、可靠的通信服务。

  • 三次握手

    • 创建连接
    • image-20210227112805516
    • image-20210530182851350
    • image-20210530182953472
  • 四次挥手

    • 断开连接
    • image-20210227112821306
  • TCP协议特点

    • 先创建连接,然后才能够发送消息
    • 全双工的
    • 三次握手、四次挥手
    • 安全性可靠性更高
    • 数据包的大
  • TCP应用场景

    • 数据量大的

    • 及时响应的

    • 比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。

      常见使用TCP协议的应用如下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输 …

image-20210525222252802

04 udp协议

  • UDP协议特点
    • 不是面向连接的通信协议,通信前不需要建立连接
    • 数据传输快
    • 不可靠,不稳定,不确保对方收到数据包,尤其网络原因,数据包丢失不会重发
    • 适用于传输大量数据
  • UDP应用场景
    • 数据量小的
    • 对时效要求不高的
    • QQ语音 QQ视频 TFTP ……

05 区别

02 协议应用

01 socket

1. 使应用程序能够直接将数据经传输层来传输,本质上是对 TCP/IP 的运用进行了一层封装,然后由应用程序直接调用其接口方法进行通信操作。
2. Socket通信可以分为2个部分,服务端和客户端;
服务端需要建立 socket 来监听指定的地址,然后等待客户端来连接。
而客户端则需要建立 socket 并与服务端的 socket 地址进行连接
3. 端口是什么概念?一台电脑就是你家的小区,你买东西如果填的地址是你家小区,那么快递员最多能把东西送到小区门口;但是如果你写上了你家的门牌号,那么快递员就能送到你家门口。同样的,电脑上同时运行着很多程序,比如QQ,旺旺…但是电脑只有只有一个IP地址,一条消息来了没人知道这个消息是给谁的,于是就有了端口的概念。QQ在这台电脑的4567端口,旺旺在这台电脑1234端口。发消息的人只要知道它在什么端口,就能准确地把消息发过来了。
同样的,网络通信两端的人得事先约定好一个端口,然后一个人守着这个端口,待另一方连接了这个端口,这才算建立了Socket连接。就好两个人打电话,不需要关心信号怎么转换和传输,但在建立这次通话之前必须有人拨号,同时有人守在电话旁

image-20210525231641348

image-20210525231655910

02 tcp应用

服务端

  • 1、创建一个服务器对象:server=socket.socket()
  • 2、在网络中绑定地址和端口: server.bind(x) #x必须元组(ip,port)
  • 3、开启网络内的监听:server.listen(y) #一次接受客户端的队列长度
  • 4、接受连接: sock,addr=server.accept()
  • 5、发送数据: sock.send(z) #z必须是字节码
  • 6、接收数据: sock.recv(1024)
  • 7、关闭连接 server.close()
    注意:accept()具有线程阻塞。需要将accept()放在循环中。
# 服务端
# 模拟tcp协议的客户端和服务器# 导入通讯包socket# 服务器
# 1.导包 import socket
# 2.创建socket实例对象  tcps = socket.socket()
# 3.绑定ip,端口 bind
# 4.设置监听 listion()
# 5.等待客户端的连接 accept()
# 6.接收和发送消息 recv() send()
# 7.关闭 closeimport sockettcps_socket = socket.socket()ip = '192.172.4.24'
port = 8082
tcps_socket.bind((ip, port))tcps_socket.listen(5)
print("服务器已经启动...")c, addr = tcps_socket.accept()   # 返回两个,一个是实例对象,该对象的addr
print(c)
while True:msg = c.recv(1024).decode('utf-8') # 解码print(msg)c.send('我收到你的消息了'.encode('utf-8')) # 编码# 服务端可以一直响应客户端

客户端

  • 1、创建一个客户端对象:client=socket.socket()
  • 2、实现客户端与服务端连接:client.connect(x) #x必须是元组(ip,port)指服务端ip和port
  • 3、客户端向服务器发送消息:client.send(data) #data必须是字节码b’xxxx’
  • 4、预留:服务端向客户端返回消息: client.recv(1024) #必须是2的x次方数字
  • 5、断开连接:client.close()
# 客户端
# 1.导包
# 2.创建socket实例对象 tcpc = socket.socket()
# 3.连接服务器
# 4.接收和发送消息 recv() send()
# 5.关闭
#
# import socket
#
# tcpc_socket = socket.socket()
#
# ip = '192.172.4.24'
# port = 8082
# tcpc_socket.connect((ip, port))
#
# say = input('客户端说:')
# tcpc_socket.send(say.encode('utf-8'))
# msg = tcpc_socket.recv(1024).decode('utf-8')
# print(msg)# 客户端可以一直给服务端发送消息import socket
print('xixi')
tcpc_socket = socket.socket()
# AF_INET : 网络ipv4
# SOCK_STREAM : TCP协议ip = '192.172.4.24'
port = 8082
tcpc_socket.connect((ip, port))while True:say = input('客户端说:')tcpc_socket.send(say.encode('utf-8'))print('555')msg = tcpc_socket.recv(1024).decode('utf-8')print(msg)print(666)

03 udp应用

客户端

  • 1、创建一个客户端对象client=socket.socket()
  • 2、
# udp
# socket
# ipv4
# SOCK_DGRAM  == udp 协议
# import socket
# socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  # UDP连接对象
# 1. 导包
# 2. 生成连接对象
# 3. 连接服务器
# 4. 接收发送消息import socket
import timeudpc_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# while True:
for i in range(1, 11):ip = '192.172.4.24'port = 8084udpc_socket.sendto(f'第{i}次向服务器发送消息'.encode('utf-8'),(ip, port))# time.sleep(2)# s, addr = udpc_socket.recvfrom(1024)# print(s.decode(('ut99f-8')))
# udpc_socket.close()

服务器

# 服务器
# 1.导包
# 2.创建连接对象
# 3.绑定ip,端口
# 4.接收消息import socketudps_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)ip = '192.172.4.24'
port = 8084
udps_socket.bind((ip, port))for i in range(1, 11):c_date, c_addr = udps_socket.recvfrom(1024)  # recv只接收数据,recvfrom c端的数据,c的地址print(c_date.decode('utf-8'))udps_socket.sendto(f'第{i}次收到客户端的消息'.encode('utf-8'), c_addr)
udps_socket.close()# udp tcp 区别:
# # 可以先启动客户端么?
# # udp的客户端,一次发送十个消息
# # 服务端接收到几个消息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/7913.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为:三层交换机与路由器连通上网实验

三层交换机是一种网络交换机,可以实现基于IP地址的高效数据转发和路由功能,通常用于大型企业、数据中心和校园网络等场景。此外,三层交换机还支持多种路由协议(如OSPF、BGP等),以实现更为复杂的网络拓扑结构…

深度学习之基于Matlab卷积神经网络验证码识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着互联网的发展,验证码作为一种常用的安全验证手段,被广泛应用于各种网站和…

W801学习笔记二十一:英语背单词学习应用——上

英语背单词是比较常见的学习APP,参考唐诗宋词应用,本章做一个类似的应用。 一、单词数据清洗及格式转换 诗词数据的获取渠道很多,一般可以按照年级来分文件。如一到九年级,四六级,雅思等等。 1、先从网上某某地方下载…

python+flask+ldap3搭建简易版IDaaS系统(前端站点)

Python工具开源专栏 Py0006 pythonflaskldap3搭建简易版IDaaS系统(前端站点) Python工具开源专栏前言目录结构前端网站的部分演示首页查询数据数据同步数据关联查询系统日志 完整代码已在GitHub上开源 前言 pythonflaskldap3搭建简易版IDaaS系统的前端站…

redis分片java实践、redis哨兵机制实现、redis集群搭建

redis分片java实践 linux安装redishttps://mp.csdn.net/mp_blog/creation/editor/134864302复制redis.conf配置文件成redis1.conf、redis2.conf、redis3.conf 修改redis的端口信息和存pid文件的路径。存pid文件的路径只要不同就行了,没什么特别要求。 指定配置文件…

《Fundamentals of Power Electronics》——示例:Buck-Boost转换器模型变为正则形式

为了说明正则电路模型推导的步骤,让我们将buck-boost转换器的等效电路操作成规范形式。buck-boost转换器的一个小信号交流等效电路如下图所示。 为了将上图所示网络转换成正则形式,需要将所有独立源d(t)转换到左侧,而将所有电感转换到右侧与变…

【Qt QML】ComboBox组件

ComboBox 是一个组合的按钮和弹出列表。它提供了一种以最小的屏幕空间呈现选项列表给用户的方式。ComboBox 使用数据模型填充。数据模型通常是一个 JavaScript 数组、一个 ListModel 或一个整数,但也支持其他类型的数据模型。 下面是一个简单的使用方式。 import …

汽车 - 什么是车轮抱死

车轮抱死分为两种情况,一种是车辆故障层面,另一种是驾驶过程中的物理现象。我们先来说最通俗的刹车车轮抱死吧。 刹车制动车轮抱死 车轮停止轴向转动就是抱死,有速度的情况下抱死车轮,如果车辆的惯性动能大于轮胎抓地力&#xff0…

SQLI-labs-第十三关和第十四关

目录 第十三关 1、判断注入点 2、判断当前数据库 3、爆表名 4、爆字段名 5、爆值 第十四关 1、判断注入点 知识点:POST方式的单引号和括号闭合错误,报错注入 第十三关 思路: 1、判断注入点 使用Burpsuite抓包 首先加入一个单引号,…

#LLM入门 | langchain | RAG # 4.3_文档分割

上一章讨论了文档标准化加载,现在转向文档的细分,这虽简单却对后续工作有重大影响。 一、为什么要进行文档分割 模型大小和内存限制:大型GPT模型参数众多,需大量计算和内存,而硬件设备如GPU或TPU有内存限制&#xff…

Leetcode—706. 设计哈希映射【简单】(constexpr)

2024每日刷题(127) Leetcode—706. 设计哈希映射 数组实现代码 class MyHashMap { public:MyHashMap() {memset(arr, -1, sizeof(arr));}void put(int key, int value) {arr[key] value;}int get(int key) {if(arr[key] -1) {return -1;} return arr…

从哪些方面可以看出现货黄金价格走势?

现货黄金价格的走势受到多种因素的影响,我们可以从宏观经济环境、货币政策、供需关系、市场情绪和技术分析几个主要方面来观察和分析这一贵金属的价格动态。现货黄金作为全球投资市场中的避险资产,其价格波动往往能体现出复杂的经济和政治变化。 宏观经济…

脸爱云一脸通智慧管理平台 SystemMng 管理用户信息泄露漏洞(XVE-2024-9382)

0x01 产品简介 脸爱云一脸通智慧管理平台是一套功能强大,运行稳定,操作简单方便,用户界面美观,轻松统计数据的一脸通系统。无需安装,只需在后台配置即可在浏览器登录。 功能包括:系统管理中心、人员信息管理中心、设备管理中心、消费管理子系统、订餐管理子系统、水控管…

OpenCV 入门(三)—— 车牌筛选

OpenCV 入门系列: OpenCV 入门(一)—— OpenCV 基础 OpenCV 入门(二)—— 车牌定位 OpenCV 入门(三)—— 车牌筛选 OpenCV 入门(四)—— 车牌号识别 OpenCV 入门&#xf…

每日一题 礼物的最大价值

题目描述 礼物的最大价值_牛客题霸_牛客网 解题思路 这是一个典型的动态规划问题。我们可以使用一个二维数组 dp[][] 来存储到达每个格子时可以获得的最大价值。状态转移方程为 dp[i][j] max(dp[i-1][j], dp[i][j-1]) grid[i][j],表示到达当前格子的最大价值是从…

Windows PC上从零开始部署ChatGML-6B-int4量化模型

引言 ChatGLM-6B是清华大学知识工程和数据挖掘小组(Knowledge Engineering Group (KEG) & Data Mining at Tsinghua University)发布的一个开源的对话机器人。6B表示这是ChatGLM模型的60亿参数的小规模版本,约60亿参数。 ChatGML-6B-in…

代码随想录第四十六天|单词拆分

题目链接:. - 力扣(LeetCode)

STM32F4xx开发学习_SysTick

SysTick系统定时器 SysTick属于CM4内核外设,有关寄存器的定义和部分库函数都在core_cm4.h这个头文件中实现,可用于操作系统,提供必要的时钟节拍 SysTick简介 SysTick是一个 24 位向下定时器,属于CM4内核中的一个外设,…

无卤素产品是什么?有什么作用?

无卤素产品,即在生产过程中完全不使用卤素元素——氟、氯、溴、碘等——的产品。 卤素元素,虽然在电子设备、材料等领域应用广泛,却也可能潜藏危害。其阻燃剂,一旦在产品生命周期结束后释放,将对土壤和水体造成污染&a…

Python-100-Days: Day11 Files and Exception

1.读取csv文件 读取文本文件时,需要在使用open函数时指定好带路径的文件名(可以使用相对路径或绝对路径)并将文件模式设置为r(如果不指定,默认值也是r),然后通过encoding参数指定编码&#xf…