utf-8:字母、英文的解码
GBK:中文的转码格式
str -> bytes:encode编码,发送信息的时候用encode编码
bytes -> str:decode解码,打印接收的信息用decode解码
test = '你好 世界'
en_code1 = test.encode('utf-8')
en_code2 = test.encode('gbk')
print(en_code1)
print(en_code2)
print(en_code1.decode('utf-8'))
print(en_code2.decode('gbk'))
socket,简称套接字,是进程间通信的工具,也能完成不同电脑间的进程间通信
首先通过ip地址找到网络中对应的电脑,然后通过传输协议和端口号来确定这个进程,使用socket完成进程间通信,即数据传输
面向无连接型:无需对端是否存在,发送端可随时发送数据
特点:无连接,资源开销小,传输速度快,每个数据包最大是64k,适用于广播应用
缺陷:传输数据不可靠,容易丢包;没有流量控制,需要接收方及时接收数据,否则会写满缓冲区
保证UPD服务端的正常启动,进入到recvfrom()模式,阻塞等到客户端发送数据
开启UDP客户端,校准IP地址,通过sendto()模块进行数据发送
当服务端接收到接收到客户端发送来的数据,进行数据处理,并将应答数据发送给客户端
客户端接收到应答数据,可进行数据处理或重复发送数据,也可退出进程
#coding=utf-8
from socket import *
# 1. 创建套接字
udp_socket = socket(AF_INET, SOCK_DGRAM)
# 2. 绑定本地的相关信息,如果一个网络程序不绑定,系统会随机分配
# ip地址和端口号,如果不指明ip,则表示本机的任何一个ip
# 如果不指明端口号,则每次启动都是随机生成端口号
local_addr = ('', 12345)
udp_socket.bind(local_addr)
while True:
# 3. 阻塞等待接收对方发送的信息
# 1024表示本次接收的最大字节数
recv_data = udp_socket.recvfrom(1024)
# 4. 显示接收到的数据,并解码为gbk
print(recv_data)
print(recv_data[0].decode('utf-8'))
# 5. 发送应答信息
# ip_addr = recv_data[1][0]
# port = recv_data[1][1]
addr = recv_data[1]
data = '信息已收到'
udp_socket.sendto(data.encode('utf-8'), addr)
udp_socket.close()
import socket
# 1. 创建upd套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 2. 准备服务端地址与端口号
# 127.0.0.1 代表自身ip地址,可向自身发送信息,也可指定ip地址发送信息
# 端口号随便填写一个未被占用的端口即可
# Linux环境有65535个端口号,前1024个端口号是系统端口号,系统端口号不能直接使用
addr = ('127.0.0.1', 12345)
while True:
# 3. 从键盘获取数据
data = input('请输入信息:')
# 4. 通过sendto()发送信息到指定进程中
udp_socket.sendto(data.encode('utf-8'), addr)
# 5. 通过recvfrom()阻塞等待获取应答数据
recv_data = udp_socket.recvfrom(1024)
# 6. 处理应答数据,进行打印
print(recv_data)
print(recv_data[0].decode('utf-8'))
udp_socket.close()
运行结果:先运行服务端,再运行客户端
面向有连接型:双方先建立连接才能进行数据传输
特点:
双方都必须为该连接分配系统内核资源
完成数据交换后,双方必须断开连接,以释放系统资源
这种连接是一对一的,不适用于广播应用
TCP提供可靠的数据传输,无差别、不丢失、不重复,且按序到达
相比于UPD,TCP数据传输速度慢、对系统资源要求较高
TCP适合发送大量数据,UDP适合发送少量数据
TCP有流量控制,UPD无流量控制
from socket import *
# 1. 创建tcp套接字
tcp_serve_socket = socket(AF_INET, SOCK_STREAM)
# 2. 设置socket选项,程序退出后,端口会自动释放
tcp_serve_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, True)
# 3. 本地信息
addr = ('', 12345)
# 4. 绑定地址
tcp_serve_socket.bind(addr)
# 5. 设置监听
# 使用socket创建的套接字默认的属性是主动的,使用listen将其变为被动的
# 参数代表等待连接时间最多60秒
tcp_serve_socket.listen(60)
# 6. 如果有新的客户端来连接服务,就产生一个新的套接字,专门为这个客户端服务
# client_socket用来为这个客户端服务
# 原来的tcp_serve_socket就可以专门用来等待其他新用户的连接
client_socket, client_addr = tcp_serve_socket.accept()
# 7. 阻塞等待客户端发送的信息
recv_data = client_socket.recv(1024)
print("接收到信息:", recv_data.decode('gbk'))
# 8. 发送应答信息
string = '已收到信息'
client_socket.send(string.encode('gbk'))
client_socket.close()
import socket
# 1. 创建TCP的套接字
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2. 目标ip信息
ip = input('请输入服务端ip:')
port = int(input('请输入服务端port:'))
# 3. 连接服务器
tcp_client_socket.connect((ip, port))
# 4. 提示用户输入数据
data = input('请输入要发送的信息:')
# 5. 编码
tcp_client_socket.send(data.encode('gbk'))
# 6. 接收服务端的应答数据
recv_data = tcp_client_socket.recv(1024)
print('收到应答数据:', recv_data.decode('gbk'))
# 7. 关闭套接字
tcp_client_socket.close()
运行结果
如果忘记设置端口的关闭,非正常退出会导致端口一直被占用
linux环境在终端执行 ps aux | grep py 查看运行的进程,然后 kill -9 pid 杀掉进程
SYN:连接请求 ACK:确认 FIN:关闭连接 seq:报文信号 ack:确认信号
第一次握手:client标志位SYN置1,随机产生一个seq=J,并将该数据包发送给serve,client进入SYN_SENT状态,等待serve确认
第二次握手:serve收到数据包后由标志位SYN=1知道client请求建立连接,serve将SYN和ACK都置1,ack(number)=J+1,+1是逻辑加一(加密),随机产生一个值seq=K,并将该数据包发送给client以确认连接请求,serve进入SYN_RECV状态
第三次握手:client收到确认,检查ack是否为J+1(解密),如果正确则将标志位ACK置1,ack=K+1,并将该数据包发送给serve,serve检查ack是否为K+1,如果正确则建立连接成功,client和serve同时进入ESTABLISHED状态,完成三次握手,随后client和serve之间可以传输数据
第一次挥手:client发送一个FIN,用来关闭client到serve的数据传送
第二次挥手:serve收到FIN后,发送一个ACK给client,确认序号为收到序号+1,表示还有剩余数据未传送完
第三次挥手:serve发送一个FIN,用来关闭serve到client的数据传送
第四次挥手:client收到FIN后,接着发送一个ACK给serve,确认序号为收到信号+1
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决
2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p
ValidPalindromeGivenastring,determineifitisapalindrome,consideringonlyalphanumericcharactersandignoringcases. [#125]Example:"Aman,aplan,acanal:Panama"isapalindrome."raceacar"isnotapalindrome.Haveyouconsiderthatthestringmightbeempty?Thisisagoodquestiontoaskduringaninterview.Forthepurposeofthisproblem
是否可以在PyYAML或Ruby的Psych引擎中禁用创建anchor和引用(并有效地显式列出冗余数据)?也许我在网上搜索时遗漏了一些东西,但在Psych中似乎没有太多可用的选项,而且我也无法确定PyYAML是否允许这样做.基本原理是我必须序列化一些数据并将其以可读的形式传递给一个不是真正的技术同事进行手动验证。有些数据是多余的,但我需要以最明确的方式列出它们以提高可读性(anchor和引用是提高效率的好概念,但不是人类可读性)。Ruby和Python是我选择的工具,但如果有其他一些相当简单的方法来“展开”YAML文档,它可能就可以了。 最佳答案
我很好奇.NET将如何影响Python和Ruby应用程序。用IronPython/IronRuby编写的应用程序是否会非常特定于.NET环境,以至于它们实际上将变得特定于平台?如果他们不使用任何.NET功能,那么IronPython/IronRuby相对于非.NET同类产品的优势是什么? 最佳答案 我不能说任何关于IronRuby的东西,但是大多数Python实现(如IronPython、Jython和PyPy)都试图尽可能忠实于CPython实现。不过,IronPython正在迅速成为这方面的佼佼者之一,并且在PlanetPyth