Python网络协议socket

news2024/11/26 14:36:37

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

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

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

相关文章

证券基金信创联盟研讨会:YashanDB分享金融核心数据库技术实践

4月26日,由证券基金行业信息技术应用创新联盟主办、WG3稽核风控系统工作组承办、国信证券股份有限公司协办的信创联盟2024年度系列研讨会第三期-稽核风控系统信创实践成功举办。国内头部企业国信证券、申万宏源证券、信达证券、国金证券、广发证券等单位共计300余人…

必应bing国内广告怎么做付费推广,提升产品曝光?

必应Bing作为微软旗下重要的搜索引擎平台,拥有着不可忽视的用户基础和市场潜力。对于寻求拓宽市场、提高品牌知名度的企业而言,利用必应Bing进行付费推广无疑是明智之选。通过必应Bing国内广告进行高效付费推广,助您轻松提升产品曝光度。 一…

TC6291C 是一款电流模式升压型DC-DC转换器芯片

一般概述 TC6291C是一款电流模式升压型DC-DC转换器。其脉宽调制电路,内置0.2Q功率场效应管使这个调节器具有高功率效率。内部补偿网络也减少了多达6个的外部元件。误差信号放大器的同相输入端连接到0.6V精密基准电压,内部软启动功能可以减小瞬间突…

Python轴承故障诊断 (18)基于CNN-TCN-Attention的创新诊断模型

往期精彩内容: Python-凯斯西储大学(CWRU)轴承数据解读与分类处理 Python轴承故障诊断 (一)短时傅里叶变换STFT Python轴承故障诊断 (二)连续小波变换CWT_pyts 小波变换 故障-CSDN博客 Python轴承故障诊断 (三)经验模态分解EMD_轴承诊断 …

关于c++ 中 string s { ‘a‘ , ‘b‘ , ‘c‘ , ‘d‘ } 的方式的构造过程

(1)这样的构造方式不常见,但也确实 STL 库提供了这样的构造函数 (2)以反汇编分析这行代码 (3)谢谢阅读

json-server的安装和使用

json-server介绍 json-server是可以把本地当做服务器,然后axios向本地区发送请求,并且不会出现跨域的问题,若是等不及后端数据,可以用这个模拟假数据 json-server安装及使用 【json-server网址】https://www.npmjs.com/package/…

泰迪智能科技中职大数据实验室建设(职业院校大数据实验室建设指南)

职校大数据实验室是职校校园文化建设的重要部分,大数据实训室的建设方案应涵盖多个方面,包括硬件设施的配备、软件环境的搭建、课程资源的开发、师资力量的培养以及实践教学体系的完善等。 打造特色,对接生产 社会经济与产业的…

Java 8特性(一) 之 手写Stream流filter、map和forEach方法

Java 8特性(一) 之 手写Stream流filter、map和forEach方法 今天看了一下Java 8的Stream流,学习了一下函数式编程,这才感受函数式编程如此爽,之前就使用过ES8.7.1的函数式编程,当时就在想啥时候咱也能写出这…

【边东随笔】北美鳄龟的生存智慧:细心 | 信心 | 狠心 | 耐心

非常谨慎,在水域中会先找到躲避将自身安置于有利地形 ( 细心 )。 浮出水面换气,水体稍有异动就会退回水中,优秀掠食者对自身优势牢牢的把握( 信心 )。 非常优雅,猎食动作不存在任何花里胡哨&a…

前端 Android App 上架详细流程 (Android App)

1、准备上架所需要的材料 先在需要上架的官方网站注册账号。提前把手机号,名字,身份证等等材料准备好,完成开发者实名认证;软著是必要的,提前准备好,软著申请时间比较长大概需要1-2周时间才能下来&#xf…

销量?模糊销量?精准销量?如何获取淘宝商品销量数据接口

淘宝爬虫商品销量数据采集通常涉及以下几个步骤: 1、确定采集目标:需要明确要采集的商品类别、筛选条件(如天猫、价格区间)、销量和金额等数据。例如,如果您想了解“小鱼零食”的销量和金额,您需要设定好价…

【busybox记录】【shell指令】paste

目录 内容来源: 【GUN】【paste】指令介绍 【busybox】【paste】指令介绍 【linux】【paste】指令介绍 使用示例: 合并文件的行 - 默认输出(默认是行合并) 合并文件的行 - 一个文件占一行 合并文件的行 - 使用指定的间隔符…

数据结构-线性表-应用题-2.2-11

1)算法的基本设计思想&#xff1a; 分别求两个升序序列的中位数a,b 若ab&#xff0c;则a或b即为所求中位数 若a<b&#xff0c;则舍弃A中较小的一半&#xff08;中位数偏小&#xff0c;往后面找&#xff09;&#xff0c;同时舍弃序列B中较大的一半&#xff0c;两次舍弃长度…

python turtle

名字动画 #SquareSpiral1.py import turtle t turtle.Pen() turtle.bgcolor("black")my_nameturtle.textinput("输入你的姓名","你的名字&#xff1f;") colors["red","yellow","purple","blue"] for…

C语言——联合体和枚举

1. 联合体 联合体和结构体类似。 联合体类型的声明&#xff1a; 联合体的特点&#xff1a; 像结构体⼀样&#xff0c;联合体也是由⼀个或者多个成员构成&#xff0c;这些成员可以是不同的类型。 但是编译器只为最⼤的成员分配⾜够的内存空间。联合体的特点是所有成员共⽤同⼀…

牛客网刷题 | BC79 小乐乐求和

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 小乐乐最近接触了求…

【小迪安全2023】第61天:服务攻防-中间件安全CVE复现K8sDockeruettyWebsphere

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

一文了解CRM系统帮助中心:从认识到搭建

客户关系管理&#xff08;CRM&#xff09;系统是企业的一个重要部分。而CRM系统帮助中心为用户提供了便捷的支持服务&#xff0c;提升了用户体验&#xff0c;减少了企业运营成本。本文将从认识到搭建&#xff0c;带你全面了解CRM系统帮助中心。 一、认识CRM系统帮助中心 CRM系统…

YOLOv8改进 | 主干篇 | 2024.5全新的移动端网络MobileNetV4改进YOLOv8(含MobileNetV4全部版本改进)

一、本文介绍 本文给大家带来的改进机制是MobileNetV4&#xff0c;其发布时间是2024.5月。MobileNetV4是一种高度优化的神经网络架构&#xff0c;专为移动设备设计。它最新的改动总结主要有两点&#xff0c;采用了通用反向瓶颈&#xff08;UIB&#xff09;和针对移动加速器优化…

Hive读写文件机制

Hive读写文件机制 1.SerDe是什么&#xff1f; SerDe是Hive中的一个概念&#xff0c;代表着“序列化/反序列化” &#xff08;Serializer/Deserializer&#xff09;。 SerDe在Hive中是用来处理数据如何在Hive与底层存储系统&#xff08;例如HDFS&#xff09;之间进行转换的机制…