Python-TCP网络编程基础以及客户端程序开发
文章目录
- 一. 网络编程基础
- - 什么是IP地址?
- - 什么是端口和端口号?
- - TCP介绍
- - socket介绍
- 二. TCP客户端程序开发
- 三. 扩展
一. 网络编程基础
- 什么是IP地址?
IP地址就是标识网络中设备的一个地址
IP地址分为 IPv4 和 IPv6
IPv4使用十进制, IPv6使用十六进制
- 查看本机IP地址:
- linux和mac系统使用 ifconfig
- windwos系统使用 ipconfig
- 什么是端口和端口号?
端口是传输数据的通道,是数据传输的必经之路,而每一个端口都有对应的端口号,想要找到端口通过端口号即可
端口号是端口的表示
端口分类: (0-65535)
1. 知名端口号: 0-1023
2. 动态端口号: 1024-65535
IP+端口 可以确定网络中唯一的应用程序
- TCP介绍
数据不能随意传输, 在发送之前还需要选择一个对应的传输协议, 保证程序之间按照指定的传输规则进行数据的通信
TCP全称 Transmission Control Protocol,简称 传输控制协议, 它是一种面向连接的, 可靠的, 基于字节流的传输层通信协议
TCP的特点:
- 面向连接:
- 通信双方必须先建立好连接才能进行数据的传输,数据传输完成后,双方必须断开此连接,以释放系统资源- 可靠传输:
- TCP 采用发送应答机制
- 超时重传
- 错误校验
- 流量控制和阻塞管理
- socket介绍
socket简称 套接字, 是进程之间通信的一个工具, 好比现实生活中的插座, 所有的家用电器想要工作都是基于插座的, 而进程之间想要进行网络通信需要基于socket
作用: 负责进程之间的网络数据传输, 好比数据的搬运工
二. TCP客户端程序开发
"""
程序架构:B/S: brower/server(浏览器/服务器), 想要使用某个服务,只需要浏览器即可C/S: Client/Server(客户端/服务器), 想要使用某个服务,必须下载它对应的客户端软件客户端连接服务器过程: (发送信息和接受信息可以重复执行)1. 创建对象2. 建立连接3. 发送信息4. 接收信息5. 关闭连接# 上述只是客户端的,服务端使用网络调试助手客户端开发流程:
Python中先要使用socket, 必须先导入 socket模块1. 创建 socket 对象 socket.socket()2. 和服务器建立连接 socket对象.connect()3. 发送信息 socket对象.send()4. 接受对方发送的信息 socket对象.recv()5. 关闭连接 socket对象.close()Python中的字符串:
Python中的字符串可以分为两种1. str2. bytes: 字节, 二进制, 网络中数据的传输都是bytes类型使用 type(变量值) 查看变量类型
str --> bytes: str类型.encode(编码类型)
bytes --> str: bytes类型.decode(编码类型)
常用编码类型: gkb 和 utf-8,这两种编码类型,都是处理中文字符串1. gbk处理方式: 将一个中文字符编码为 2 个字节2. utf-8处理方式: 将一个中文字字符编码为 3 个字节
"""
import socketif __name__ == '__main__':# 1.创建socket对象 socket.socket(ip类型, 协议)# socket.AF_INET 代表IPV4 socket.AF_INET6 代表IPV6# SOCK_STREAM 代表TCPclient_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 固定写法# 2. 和服务器建立连接 socket对象.connect((服务器IP地址, 端口号)) 类型是元组client_socket.connect(("192.168.218.1", 8080))print("连接建立成功")# 3. 发送信息 socket对象.send(发送的信息) 需要是bytes类型send_data = "hello world!!!!".encode() # 默认是utf-8client_socket.send(send_data)# 4. 接受对方发送的信息 socket对象.recv(一次接收多少字节的数据)# 注意: 如果对方没有发送信息, recv函数会在此阻塞等待buf = client_socket.recv(4096)try:print(buf.decode()) # 接受信息也是bytes 所以需要转换一下,默认是utf-8except UnicodeDecodeError:print(buf.decode('gbk')) # 也有可能是 gkb编码, 所以需要捕捉一下异常# 5. 关闭连接 socket对象.close()client_socket.close()
三. 扩展
当创建一个 TCP socket 的时候,会有一个 发送缓冲区 和 接收缓冲区 , 这个发送和接收缓冲区指的就是内存中的一片空间
- send原理解剖:
send并不是直接把数据发送给服务器端, 想要发送数据, 就必须使用网卡进行发送, 而应用程序是无法直接通过网卡发送数据的, 需要调用系统接口, 也就是说
应用程序把发送的信息先写到发送缓存区, 再由操作系统控制网卡把发送缓冲区的数据发送给服务端网卡
- recv原理解剖:
同理, 应用程序也无法直接通过网卡接收数据, 也需要调用系统接口, 由操作系统通过网卡接收数据, 把接收的数据写入缓冲区, 应用程序再从缓冲区获得客户端发送的信息
相关文章:
Python-TCP网络编程基础以及客户端程序开发
文章目录一. 网络编程基础- 什么是IP地址?- 什么是端口和端口号?- TCP介绍- socket介绍二. TCP客户端程序开发三. 扩展一. 网络编程基础 - 什么是IP地址? IP地址就是标识网络中设备的一个地址 IP地址分为 IPv4 和 IPv6 IPv4使用十进制, IPv6使用十六进制 查看本机IP地址: l…...
超低成本DDoS攻击来袭,看WAF如何绝地防护
一、DDoS攻击,不止于网络传输层 网络世界里为人们所熟知的DDoS攻击,多数是通过对带宽或网络计算资源的持续、大量消耗,最终导致目标网络与业务的瘫痪;这类DDOS攻击, 工作在OSI模型的网络层与传输层,利用协…...
CF1795E Explosions? (单调栈)
传送门 题意: 有 n 个怪兽需要消灭,它们的生命值分别是 h [1],h [2]......h [n]. 我们可以使用两种技能: 技能 1:选择任意一个怪兽,使其生命值降低 1 点,并且需要 1 点能量值. 技能 2:选择任意…...
C++——二叉树排序树
文章目录1 二叉搜索树概念2 二叉搜索树操作与模拟实现2.1 二叉搜索树的查找非递归版本递归版本2.2 二叉搜索树的插入非递归版本递归版本2.3 二叉搜索树的删除非递归版本递归版本3 二叉搜索树的应用(K模型、KV模型)4 二叉搜索树的性能分析1 二叉搜索树概念…...
深拷贝浅拷贝的区别?如何实现一个深拷贝?
一、数据类型存储 JavaScript中存在两大数据类型: 基本类型 Number String null Undefined Boolean symbol引用类型 array object function 基本类型数据保存在在栈内存中 引用类型数据保存在堆内存中,引用数据类型的变量是一个指向堆内存中实际对象的…...
Linux应用编程下连接本地数据库进行增删改查系列操作
文章目录前言一、常用SQL操作语句二、相关函数解析三、连接本地数据库四、编译运行五、程序源码前言 本篇为C语言应用编程下连接Linux本地数据库进行增删改查系列操作。 在此之前,首先当然是你需要具备一定的数据库基础,所以下面我先列出部分常用的SQL…...
图论学习03
图神经网络模型介绍 将图神经网络分为基于谱域上的模型和基于空域上的模型,并按照发展顺序详解每个类别中的重要模型。 基于谱域的图神经网络 谱域上的图卷积在图学习迈向深度学习的发展历程上起到了关键性的作用。三个具有代表性的谱域图神经网络 谱图卷积网络切…...
解决qt中cmake单独存放 .ui, .cpp, .h文件
设想 项目文件较多,全部放在一个目录下就像依托答辩。 希望能将头文件放入include,ui文件放入ui,源文件放入src。 为了将Qt代码和一般非Qt代码分离开,进一步地: 将Qt源文件放入qt_src,普通源文件放入sr…...
操作系统(day12)-- 基本分段存储,段页式存储
基本分段存储管理方式 不会产生内部碎片,会产生外部碎片 分段 按照程序自身的逻辑关系划分为 若干个段,每个段都有一个段名,每段从0开始编址 分段存储管理方式中一个段表项由段号(隐含)、段长、基地址 分段的段表项固…...
疯狂弹出请插入多卷集的最后一张磁盘窗口
整个人嘛了,今天插上U盘,跟tmd中了病毒一样, 屏幕疯狂弹出窗口, 提示请插入多卷集的最后一张磁盘! 点确定之后他继续弹出,点取消它也继续弹出, 关掉一个又弹出来一个,妈的&#x…...
Spark12: SparkSQL入门
一、SparkSQL Spark SQL和我们之前讲Hive的时候说的hive on spark是不一样的。hive on spark是表示把底层的mapreduce引擎替换为spark引擎。而Spark SQL是Spark自己实现的一套SQL处理引擎。Spark SQL是Spark中的一个模块,主要用于进行结构化数据的处理。它提供的最核…...
show profile和trance分析SQL
目录 一.show profile分析SQL 二.trance分析优化器执行计划 一.show profile分析SQL Mysql从5.0.37版本开始增加了对show profiles和show profile语句的支持。show profiles能够在做SQL优化时帮助我们了解时间都耗费到哪里去了。。 通过have_profiling参数,能够…...
[AI生成图片] 效果最好的Midjourney 的介绍和使用
Midjourney介绍: 是一个文本生成图片的扩散模型,能够根据输入的任何文本生成令人难以置信的图像,让数十亿人在几秒钟内创造惊人的艺术。为方便用户控制和快速生成图片,打开后在页面底部输入文本内容,稍等一小会&#…...
Vue.use( ) 的核心原理
首先来思考几个问题: Vue.use是什么? vue.use() 是vue提供的一个静态方法,主要是为了注册插件,增加vue的功能。 Vue.use( plugin ) plugin只能是Object 或 Function vue.use()做了什么工作? 该js如果是对象 该对象…...
idea同时编辑多行-winmac都支持
1背景介绍 idea编辑器非常强大,其中一个功能非常优秀,很多程序员也非常喜欢用。这个功能能够大大大提高工作效率-------------多行代码同时编辑 2win 2.1方法1 按住alt鼠标左键上/下拖动即可 这样选中多行后,可以直接多行编辑。 优点&a…...
亿级高并发电商项目-- 实战篇 --万达商城项目 十一(编写商品搜索功能、操作商品同步到ES、安装RabbitMQ与Erlang,配置监听队列与消息队列)
👏作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者 📕系列专栏:前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶 Ǵ…...
数据结构概述和稀疏数组
数据结构和算法内容介绍 1)算法是程序的灵魂,优秀的程序可以在海量数据计算时,仍然保持高速计算 数据结构和算法概述 1)程序 数据结构算法 2)学好数据结构可以编写出更加漂亮,更加有效率的代码 3&…...
宝塔搭建实战人才求职管理系统adminm前端vue源码(三)
大家好啊,我是测评君,欢迎来到web测评。 上一期给大家分享骑士cms后台admin前端vue在本地运行打包、宝塔发布部署的方式,本期给大家分享,后台adminm移动端后台vue前端怎么在本地运行,打包,实现线上功能更新…...
服务器是干什么用的?
首先,什么是服务器?服务器是提供计算服务器和网络服务的设备。服务器和计算机由CPU、硬盘、内存、系统总线等组成。比如我们访问一个网站,点击这个网站会发出访问请求,服务器会响应服务请求,进行相应的处理,…...
C++ 之结构体与共用体
文章目录参考描述结构体使用(基本)声明初始化先创建后初始化C 11 列表初始化使用(进阶)结构数组声明(拓展)声明及创建声明及初始化匿名结构体细节外部声明与内部声明成员赋值共用体存储空间匿名共用体同化尾…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...
【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁
赛门铁克威胁猎手团队最新报告披露,数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据,严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能,但SEMR…...
如何做好一份技术文档?从规划到实践的完整指南
如何做好一份技术文档?从规划到实践的完整指南 🌟 嗨,我是IRpickstars! 🌌 总有一行代码,能点亮万千星辰。 🔍 在技术的宇宙中,我愿做永不停歇的探索者。 ✨ 用代码丈量世界&…...
Copilot for Xcode (iOS的 AI辅助编程)
Copilot for Xcode 简介Copilot下载与安装 体验环境要求下载最新的安装包安装登录系统权限设置 AI辅助编程生成注释代码补全简单需求代码生成辅助编程行间代码生成注释联想 代码生成 总结 简介 尝试使用了Copilot,它能根据上下文补全代码,快速生成常用…...
