每个电脑上都有一个网卡,往卡上都记录一个独一无二的地址. **mac地址**: 就是你的计算机上网卡上标注的地址. 12位16进制数组成 :前六位是厂商编号,后六位是流水线号....如果直接与操作系统数据交互非常麻烦,繁琐,socket对这些繁琐的的操作高度的封装,简化. 2.socket在python中就是一个模块. 7.基于TCP协议的socket简单通信 # 服务端...subprocess模块,作用是可以执行命令, 然后修改接收内容,改成操作命令的固定代码 客户端接收内容需要改成gbk编码,因为windows操作系统的默认编码是gbk编码,苹果系统不需要改...导入struct模块: 服务端制作固定长度的报头使用 客户端反解报头使用 代码实验有效作用: 服务端: total_size = len(result) # 查看字节...When the remote end is closed and all data is read, return the empty string.关闭远程端并读取所有数据后,返回空字符串。
使 用 'from socket import *',我们就把 socket 模块里的所有属性都带到我们的命名空间里了,这 样能 大幅减短我们的代码。...,addr=udp_server_sock.recvfrom(1024)# 阻塞状态,等待接收消息 print('来自[%s:%s]的一条消息:\033[1;34;43m%s\033[0m' %...,addr=udp_client_socket.recvfrom(BUFSIZE)# 同样也是阻塞状态,等待接收消息 print('来自[%s:%s]的一条消息:\033[1;34;43m...struct模块 该模块可以把一个类型,如数字,转成固定长度的bytes 图片 import struct # 将一个数字转化成等长度的bytes类型。...: 我们可以把报头做成字典,字典里包含将要发送的真实数据的描述信息(大小啊之类的),然后json序列 化,然后用struck将序列化后的数据长度打包成4个字节。
2.套接字工作流程 image.png 3.套接字的函数 s都为通过socket模块生成 import socket # socket_family 可以是 AF_UNIX 或 AF_INET。...使用 'from socket import *',我们就把 socket 模块里的所有属性都带到我们的命名空间里了,这样能大幅减短我们的代码 s = socket(AF_INET, SOCK_STREAM...,(阻塞式)等待连接的到来 2.客户端套接字函数 方法 用途 s.connect() 主动初始化TCP服务器连接 s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛出异常...data = conn.recv(1024) #最大接收的字节数,没有数据会在原地一直等待收,即发送者发送的数据量必须>0bytes # print('===>')...if len(data) == 0: break #在客户端单方面断开连接,服务端才会出现收空数据的情况 print('来自客户端的数据', data)
1.1 socket模块: 要创建套接字,必须使用套接字模块中的socket.socket()函数,该函数具有一般语法 s = socket.socket (socket_family, socket_type...s.bind((host,port)) try: while True: receive_data,addr = s.recvfrom(1024) print("来自服务器...s.sendto(send_data.encode('utf-8'),(host,port)) msg,addr = s.recvfrom(1024) print("来自服务器...user = {} # 存放字典{addr:name} while True: try: data, addr = s.recvfrom(1024) # 等待接收客户端消息存放在...addr时间执行下面的代码 s.sendto(data, address) #发送data和address到客户端 except ConnectionResetError
服务器端负责监听和处理来自客户端的请求,而客户端则发起请求并与服务器进行交互。在聊天应用中,服务器需要处理多个客户端的连接,并实时传递消息。2....使用 Python 的 socket 模块Python 的 socket 模块提供了低级别的网络接口,允许我们实现 TCP/IP 协议的客户端和服务器功能。...我们将使用这个模块来创建一个简单的聊天服务器。2.1 服务器端实现服务器端的任务是监听客户端的连接、接收和转发消息。...message.encode('utf-8'))if __name__ == "__main__": start_client()2.4 代码说明receive_messages 函数: 在单独的线程中接收来自服务器的消息并打印...,可以考虑以下优化:异步编程: 使用 asyncio 模块来实现异步 I/O 操作,提高服务器处理能力。
你要打电话给一个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以讲话了。等交流结束,挂断电话结束此次交谈。 生活中的场景就解释了这工作原理。...服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。...,(阻塞式)等待连接的到来 客户端套接字函数 s.connect() 主动初始化TCP服务器连接 s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛出异常...data=self.request.recv(1024) #self.request相当于socket里面的conn 7 print('收到来自客户端...except ConnectionResetError as e: 10 print('error:',e) 11 break 12 if
| | +-- ConnectionAbortedError | | +-- ConnectionRefusedError | | +-- ConnectionResetError...OSError 操作系统错误 WindowsError 系统调用失败 ImportError 导入模块/对象失败 LookupError 无效数据查询的基类 IndexError 序列中没有此索引(index...None ''' try 语句的工作方式为: 首先,执行 try 子句 (在 try 和 except 关键字之间的部分); 如果没有异常发生, except 子句 在 try 语句执行完毕后就被忽略了...--> 2、调用:getNum(1) 输出结果: try --> 10.0 else --> finally --> ''' 其中,else 子句只能出现在所有 except 子句之后,只有在没有出现异常时执行...;finally 子句放在最后,无论是否出现异常都会执行。
,(阻塞式)等待连接的到来 #2、客户端套接字函数 s.connect() 主动初始化TCP服务器连接 s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛出异常...此外,发送方引起的粘包是由TCP协议本身造成的,TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一个TCP段。...若连续几次需要send的数据都很少,通常TCP会根据优化算法把这些数据合成一个TCP段后一次发送出去,这样接收方就收到了粘包数据。...7、解决粘包的处理方法 程序流程:客户端发送命令,服务端在本地执行后,返回得到的结果给客户端 # 服务端: from socket import * import subprocess import struct...,错误的stderr conn.send(stderr) except ConnectionResetError: break conn.close
socket类,加() 实例化成一个对象(ctrl + 单击 可以看到) # 不要形成固有思想, 模块.名字() 就以为是模块里的方法,点进去,可能还是类(看他这个类的名字还是全小写的...)...(双重循环 server.accpet() 来连接建立连接) 暂时不知道 半连接池,允许等待的最大个数 ?...server.listen(5)指定5个等待席位 通信循环 双方都处于收的等待状态 直接回车没有发出数据,自身代码往下走进入了等待接收状态, 而另一端也没有收到消息,依然处于等待接收状态图,双方就都处于等待接收的状态了...,就可以对应着收了 struct模块 该模块可以把一个类型,如数字,转成固定长度的bytes 这里利用struct模块模块的struct.pack() struct.unpack()方法来实现打包(将真实数据长度变为固定长度的数字...)解包(将该数字解压出打包前真实数据的长度) pack unpack模式参数对照表(standard size 转换后的长度) ?
', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。'...PySpark 也可以参考 【Python】pyecharts 模块 ② ( 命令行安装 pyecharts 模块 | PyCharm 安装 pyecharts 模块 ) 博客 , 在 PyCharm...中 , 安装 PySpark ; 尝试导入 pyspack 模块中的类 , 如果报错 , 使用报错修复选项 , PyCharm 会自动安装 PySpark ; 二、PySpark 数据处理步骤 PySpark...执行环境入口对象 执行 数据读取操作 , 读取后得到 RDD 类实例对象 ; 然后 , 进行 数据处理计算 , 对 RDD 类实例对象 成员方法进行各种计算处理 ; 最后 , 输出 处理后的结果 ,...RDD 对象处理完毕后 , 写出文件 , 或者存储到内存中 ; 数据的初始形态 , 一般是 JSON 文件 , 文本文件 , 数据库文件 ; 通过 SparkContext 读取 原始文件 到 RDD
由于数据量的增大,调用接口的次数会增加。 当连续向目标网站发送多次request后,目标网站可能会认为是,恶意攻击。 于是会抛出requests异常。...', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。'...在等待异常过程中,变相的time.sleep了。 按照这个思路,写代码,验证,目前来看还是相对靠谱的。
当一个异步功能调用发出后,调用者不能立刻得到结果。 #当该异步功能完成后,通过状态、通知或回调来通知调用者。...从用户进程角度讲 ,它发起一个read操作后,并不需要等待,而是马上就得到了一个结果。...:如果客户端断开连接的时候,就会发生ConnectionResetError 所以我们的处理一下这个异常。...fd再有新的数据又可以响应到了 #(发送端因为基于TCP协议所以需要收到应答后才会清除)。...七、selsectors模块 这三种IO多路复用模型在不同的平台有着不同的支持,而epoll在windows下就不支持,好在我们有selectors模块,帮我们默认选择当前平台下最合适的 #服务端 from
当一个异步功能调用发出后,调用者不能立刻得到结果。 当该异步功能完成后,通过状态、通知或回调来通知调用者。...从用户进程角度讲 ,它发起一个read操作后,并不需要等待,而是马上就得到了一个结果。...:如果客户端断开连接的时候,就会发生ConnectionResetError 所以我们的处理一下这个异常。...,这样重新监听时fd再有新的数据又可以响应到了 (发送端因为基于TCP协议所以需要收到应答后才会清除)。...七、selsectors模块 这三种IO多路复用模型在不同的平台有着不同的支持,而epoll在windows下就不支持,好在我们有selectors模块,帮我们默认选择当前平台下最合适的 1 #服务端
.x.x.x:2333等待客户端连接 公网服务器listen 222.x.x.x:12345等待受害者连接 客户端connect->222.x.x.x:2333 客户端connect->127.0.0.1...,转发我们的流量,达到隐藏自身的目的 场景: 获得某些主机控制权后,将其作为跳板来转发我们的流量 t0r(0ni0n)的socks4代理 $$r(小飞机)的socks5代理 当然,在转发的过程中需要解析请求...,socks5过程结束后只需无脑转发两端流量即可 ---- 流量转发的代码实现 简单的流量转发代码实现其实并不难,但我们需要考虑一下因素 效率 并发 关闭socket socket通信中,有以下几处操作会阻塞...,效率未免太低,所以我们可以选择: select/poll/epoll I/O多路复用 coroutine multi-thread multi-process 后两种当然会排除,因为它们太重了 Python...data) else: done = True except (BlockingIOError, ConnectionResetError
目录 线程 简介 开设线程的两种方式 方法一: 方法二: 线程对象的join方法 线程之active_count模块 线程之current_thread模块 守护线程 线程数据共享 线程互斥锁 补:TCP...,也不需要等待主进程执行完再执行子进程等问题 # 所以开设线程所需要的时间更短,速度更快 方法二: # 和进程类似,继承的方式 class Myclass(Thread): def __init...t = Myclass('Hammer') t.start() 线程对象的join方法 在进程中的join方法是,主进程等待子进程执行完再运行; 线程中顾名思义是一样的,主线程等待子线程执行完再执行...2个子线程 线程之current_thread模块 获取当前线程的名字 from threading import Thread,current_thread import time def test...# 子线程可以通过t.name直接拿,主线程必须通过方法.name拿 守护线程 类似守护进程一样,一个线程结束其他线程也得结束(陪葬) 主线程的结束意味着整个进程的结束,所以主线程需要等待里面所有非守护线程的结束才能结束
当一个read操作发生时,该操作会经历两个阶段: 1.等待数据准备 2.将数据从系统内核拷贝到进程当中 当收到数据后,这些数据会先存放到系统所用的内存当中,之后在由系统将数据从内核中拷贝到使用的进程当中...recvfrom进行系统调用后,等待数据和拷贝数据的两个阶段都被阻塞了 二.非阻塞IO (nonblocking IO) ?...这里等待数据的阶段并没有阻塞,但是数据从内核中拷贝到使用的进程的过程中还是处于阻塞状态。...ready_obj) continue ready_obj.send(data.upper()) except ConnectionResetError...然后,kernel会等待数据准备完成,然后将数据拷贝到用户内存,当这一切都完成之后,kernel会给用户进程发送一个signal,告诉它read操作完成了。
语句来处理异常, 其中 finally 语句主要用于try....except代码块执行后的清理流程,语法格式如下: # 方式1.try - except 语句语法 try: 检测的代码块 except...Exception [as reaon]: 出现异常后执行的代码 # 方式2.try - except - else 语句语法** try: 检测的代码块 except Exception...[as reaon]: 出现异常后执行的代码 else: 当没有异常发生时,else中的语句将会被执行 # 方式3.try - except - finally 语句 try:...检测的代码块 except Exception [as reaon]: 出现异常后执行的代码 else: 当没有异常发生时,else中的语句将会被执行 finally: 无论怎么样都会被执行的代码...如果 finally 子句中包含 return 语句,则返回值来自 finally 子句的某个 return 语句的返回值,而不是来自 try 子句的 return 语句的返回值(特别注意)。
应用程序员有了这些接口后,就不用再考虑操作硬件的细节,专心开发自己的应用程序即可。...,addr=udp_server_sock.recvfrom(1024)# 阻塞状态,等待接收消息 print('来自[%s:%s]的一条消息:\033[1;44m%s\033[0m' %(addr...,addr=udp_client_socket.recvfrom(BUFSIZE)# 同样也是阻塞状态,等待接收消息 print('来自[%s:%s]的一条消息:\033[1;44m%s...: 先介绍一下struct模块: 该模块可以把一个类型,如数字,转成固定长度的bytes ** ?...模块 —— 自定制报头解决文件上传下载过程中的粘包问题 4.hashlib或者hmac模块 —— 实现文件的一致性校验和用户密文登录 5.os模块 —— 实现目录的切换及查看文件文件夹等功能
Event事件(了解) 线程q(了解) 进程池与线程池(掌握) 进程池与线程池的基本使用 线程池 进程池 协程 名词解释 gevent模块 协程实现TCP服务端并发的效果 IO模型 基本关键字 研究方向...对比半连接池只限制了等待的数量;) 进程池:提前开设了固定个数的进程 之后反复调用这些进程完成工作(后续不再开设新的) 线程池:提前开设了固定个数的线程 之后反复调用这些线程完成工作(后续不再开设新的...期间不做任何事 异步:提交完任务之后不愿地等待任务的返回结果 结果由异步回调机制自动反馈 """ # 等待线程池中所有的任务执行完毕之后 再获取各自任务的结果 # pool.shutdown() #...:多进程下开设多线程,多线程下开设协程 我们以后可能自己动手写的不多,一般都是使用别人封装好的模块或框架 IO模型 IO模型研究的主要是网络IO(linux系统),理论为主,代码实现大部分为伪代码;...(轮询) 有一个等待的阶段(copy data),轮询的阶段是比较消耗资源的; 通俗的理解:会一直询问kernel有没有数据~,并不会阻塞操作,直到copy才会阻塞; ---- 多路复用IO 利用
,理论可以 # 评论多评检测(防止有人故意而为之) #热榜评论 #接下来自动发表博客(对接chatgpt) 正文 在python中,如何使函数调用各自运行,不互相影响,例如下面代码: import time...multiprocessing模块。...这个模块可以让你在不同的进程中运行函数,从而实现并行计算。...以下是如何使用 multiprocessing 模块重写你的代码: import time import multiprocessing def A(): for i in range(1,100...join() 方法则会等待进程执行完毕后再继续执行后续的代码。使用 if name == ‘main’: 判断语句可以保证在 Windows 操作系统下运行多进程代码时不会出现异常。
领取专属 10元无门槛券
手把手带您无忧上云