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.关闭 close

import socket

tcps_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 time

udpc_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# while True:
for i in range(1, 11):
    ip = '192.172.4.24'
    port = 8084

    udpc_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 socket

udps_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的客户端,一次发送十个消息
# # 服务端接收到几个消息

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

铜价飙升,慧能泰HUSB332F带你狂飙

铜价,近期涨的很飘,涨到怀疑人生。继黄金后,铜成了另一个疯涨的明星!作为电线电缆生产不可或缺的原材料,铜的身价暴涨直接拉响了成本警报,压缩了企业的利润空间。众多电线电缆制造商面临着严峻的挑战与考验…

LeetCode-DFS-树类-简单难度

关于二叉树的相关深度优先遍历类题目,重点在于掌握最基本的前中后序遍历,大多数题目都在围绕这套逻辑,找到处理节点的时机,以及停止遍历的条件,即可顺利完成。 二叉树前中后序遍历模板 所谓前中后序,指的…

蓝桥杯备赛(填空题)【Python B组】

一、弹珠堆放 问题描述 小蓝有 20230610 颗磁力弹珠,他对金字塔形状尤其感兴趣,如下图所示: (图是盗来的啊,侵权请联系删除) 问题分析 找规律,第一层1个,第二层3个,第…

预定类小程序源码搭建包含各行业+源码开源可二开+详细图文搭建部署教程

在数字化浪潮席卷的今天,各行各业都急需找到与顾客连接的新方式。为了满足这一需求,很多店铺和企业都推出了预定类小程序,分享一款开源版预订类小程序源码,一站式解决方案,覆盖餐饮、旅游、美容、医疗、教育等多个行业…

《架构思维:从程序员到CTO》:通往顶级架构师之路

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

让我们把Domino变成SFTP服务器

大家好,才是真的好。 远程共享文件有很多办法,其中值得注意的是SFTP方式。SFTP即SSH文件传输协议,通过使用SSH传输层,SFTP可以通过Internet连接安全地访问和移动大量数据文件。 今天我们就介绍使用Domino中的HTTP OSGI方式来实现…

智慧监测IN!计讯物联筑牢高速滑坡预警“安全锁”

在现代社会,高速公路以其高速、便捷的特性,早已成为连接城市与地区之间的重要纽带,承载着日益增长的车流和人流。然而,随着车流量的激增,高速公路面临的运营压力和安全挑战也随之加大,其中滑坡风险尤为突出…

软考中级-软件设计师(十)网络与信息安全基础知识

一、网络概述 1.1计算机网络的概念 计算机网络的发展:具有通信功能的单机系统->具有通信功能的多机系统->以共享资源为目的的计算机网络->以局域网及因特网为支撑环境的分布式计算机系统 计算机网络的功能:数据通信、资源共享、负载均衡、高…

Echarts柱状图横坐标不显示

本人遇到的问题:折线图横坐标可以正常显示 柱状图接收一样的数据在横坐标却显示不了 1.在前端打印是否能够正常接收数据、数据类型是否有误以及数据是否有内容 console.log(typeof optionbar.xAxis.data)console.log(optionbar.xAxis.data) 2.如上确定能够接收到数…

ue引擎游戏开发笔记(32)——为游戏添加新武器装备

1.需求分析: 游戏中角色不会只有一种武器,不同武器需要不同模型,甚至可能需要角色持握武器的不同位置,因此需要添加专门的武器类,方便武器后续更新,建立一个武器类。 2.操作实现: 1.在ue5中新建…

艺术的新领域——探索元宇宙艺术展带来的沉浸式艺术体验

在数字化的浪潮中,元宇宙艺术展成为了一种全新的展览形式,它通过虚拟现实、3D建模技术和互动平台,将传统艺术与现代科技巧妙结合,提供了一种前所未有的艺术欣赏方式。此类展览不仅展示了艺术作品的新颖呈现,还为参观者…

翻译《The Old New Thing》 - Understanding the consequences of WAIT_ABANDONED

Understanding the consequences of WAIT_ABANDONED - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20050912-14/?p34253 Raymond Chen 2005年09月12日 理解 WAIT_ABANDONED 的后果 简要 文章讨论了在多线程同步中,如果一个线程…

【贪心算法】最小生成树Kruskal算法Python实现

文章目录 [toc]问题描述最小生成树的性质证明 Kruskal算法Python实现时间复杂性 问题描述 设 G ( V , E ) G (V , E) G(V,E)是无向连通带权图, E E E中每条边 ( v , w ) (v , w) (v,w)的权为 c [ v ] [ w ] c[v][w] c[v][w]如果 G G G的一个子图 G ′ G^{} G′是…

中国居民消费新特征:中枢回落,即时满足,去地产化

随着收入预期和财富效应的转变,居民更倾向于通过短期集中式的消费来获得即时满足的快乐,服务消费表现出了更强的韧性。服务消费强于商品消费、消费去地产化、汽车挑大梁的特征延续。 特征一:消费倾向高于2020-22年,低于2017-19年…

AI技术赋能下的视频监控方案是如何解决新能源汽车充电难问题的?

一、方案背景 刚刚结束的第十八届北京车展异常火爆,其中一组与汽车有关的数字让人格外关注。根据乘联会2024年4月19日公布的最新数据,全国乘用车市场零售达到51.6万辆,其中新能源车的销量约为26万辆,市场渗透率达到50.39%。 这意味…

如何让CANoe或Wireshark自动解析应用层协议

当我们使用CANoe软件或Wireshark工具抓取以太网总线上的报文时,网卡首先会把以太网总线上的模拟信号解析成以太网帧数据。数据链路层根据二层头部中的Type字段值确定上层的协议。 如果以太网使用的是TCP/IP协议栈,那么Type值要么是0x0800(IPv4),要么是0x0806(ARP),要么是0x…

SOL链DApp智能合约代币质押挖矿分红系统开发

随着区块链技术的不断发展和普及,越来越多的项目开始探索基于区块链的去中心化应用(DApp)。Solana(SOL)作为一条高性能、低成本的区块链网络,吸引了众多开发者和项目,其中包括了各种类型的DApp&…

Ansible自动化工具模块调用与playbook编写

目录 一、Ansible工作机制与特点 (一)Ansible工作机制 1. 初始化与配置 2. 编写Playbook 3. 调用模块 4. 加密敏感数据 5. 执行Playbook 6. 收集执行结果 7. 错误处理与回滚 8. 反馈与报告 (二)Ansible 的主要特点包括…

信锐交换机简介及应用说明(1)

交换机关键参数及分类 1.线速 线速是指交换机的端口上每秒钟传输的bit数,单位为bps(bit per second,即每秒传输多少bit,一个bit也就是一个二进制数0或者1)。以我们常见的例子来说明的话,比如100M的网卡就…

ComfyUI中图像亮度/对比度/饱和度处理

用上面这个节点可以同时设置图片的亮度、对比度和饱和度。 【保姆级教程】一口气分享在ComfyUI中常用的30多种基本图像处理方式 更多好玩且实用AIGC工作流和节点 星球号:32767063 本期资料链接 往期学习资料 整理AI学习资料库