Python入门【TCP建立连接的三次握手、 TCP断开连接的四次挥手、套接字编程实战、 TCP编程的实现、TCP双向持续通信】(二十七)
👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白
📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发
📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦
🍂博主正在努力完成2023计划中:以梦为马,扬帆起航,2023追梦人
🔥🔥🔥 python入门到实战专栏:从入门到实战
🔥🔥🔥 Python爬虫开发专栏:从入门到实战
🔥🔥🔥 Python办公自动化专栏:从入门到实战
🔥🔥🔥 Python数据分析专栏:从入门到实战
🔥🔥🔥 Python前后端开发专栏:从入门到实战
目录
TCP建立连接的三次握手
TCP断开连接的四次挥手
数据包与处理流程
数据包处理流程
套接字编程实战
UDP编程介绍
UDP编程的实现
持续通信
TCP编程介绍
TCP编程的实现
TCP双向持续通信
结合多线程实现TCP双向传送(自由聊天)
TCP建立连接的三次握手
TCP是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。 一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂, 只简单的描述下这三次对话的简单过 程:
1)主机A向主机B发出连接请求:“我想给你发数据,可以吗?”,这是第一次对话;
2)主机B向主机A发送同意连接和要求同步 (同步就是两台主机一个在发送,一个在接收,协调工作)的数据包 :“可以,你什么时候 发?”,这是第二次对话;
3)主机A再发出一个数据包确认主机B的要求同步:“我现在就发, 你接着吧!”, 这是第三次握手。 三次“对话”的目的是使数据包的发送和接收同步, 经过三次“对话” 之后,主机A才向主机B正式发送数据。
1、第一步,客户端发送一个包含SYN即同步(Synchronize)标志的TCP报文,SYN同步报文会指明客户端使用的端口以及TCP连接的初始序号。
2、第二步,服务器在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示客户端的请求被接受,同时TCP序号被加一,ACK即确认(Acknowledgement)
3、第三步,客户端也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。然后才开始通信的第二步:数据处理。
这就是所说的TCP的三次握手(Three-way Handshake)。
为什么TCP协议有三次握手,而UDP协议没有?
因为三次握手的目的是在client端和server端建立可靠的连接。保证双方发送的数据对方都能接受到,这也是TCP协议的被称为可靠的数据传输协议的原因。而UDP就不一样,UDP不提供可靠的传输模式,发送端并不需要得到接收端的状态,因此 UDP协议就用不着使用三次握手。
TCP断开连接的四次挥手
TCP建立连接要进行3次握手,而断开连接要进行4次:
第一次: 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求 ;
第二次: 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1;
第三次: 由B 端再提出反方向的关闭请求,将FIN置1 ;
第四次: 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束.。
由TCP的三次握手和四次断开可以看出,TCP使用面向连接的通信方式, 大大提高了数据通信的可靠性,使发送数据端和接收端在数据正式传输前就有了交互, 为数据正式传输打下了可靠的基础。
数据包与处理流程
什么是数据包
通信传输中的数据单位,一般也称“数据包”。在数据包中包括: 包、帧、数据包、段、消息。
网络中传输的数据包由两部分组成:一部分是协议所要用到的首部,另一部分是上一层传过来的数据。首部的结构由协议的具体规范详细定义。在数据包的首部,明确标明了协议应该如何读取数 据。反过来说,看到首部,也就能够了解该协议必要的信息以及所要处理的数据。包首部就像协议的脸。
数据包处理流程
套接字编程实战
socket编程介绍
TCP协议和UDP协议是传输层的两种协议。Socket是传输层供给应用层的编程接口,所以Socket编程就分为TCP编程和UDP编程两类。
Socket编程封装了常见的TCP、UDP操作,可以实现非常方便的网络编程。
socket()函数介绍
在Python语言标准库中,通过使用socket模块提供的socket对象, 可以在计算机网络中建立可以互相通信的服务器与客户端。在服务器端需要建立一个socket对象,并等待客户端的连接。客户端使用socket对象与服务器端进行连接,一旦连接成功,客户端和服务器端就可以进行通信了。
⚠️上图中,我们可以看出socket通讯中,发送和接收数据,都是通过操作系统控制网卡来进行。因此,我们在使用之后,必须关闭socket。
在Python 中,通常用一个Socket表示“打开了一个网络连接”,语法格式如下:
socket.socket([family[, type[, proto]]])
family : 套接字家族可以使 AF_UNIX 或者 AF_INET ;
AF 表示ADDRESS FAMILY 地址族
AF_INET(又称 PF_INET)是 IPv4 网络协议的套接字类型;而 AF_UNIX 则是 Unix 系统本地通信
type : 套接字类型可以根据是面向连接的还是非连接分为 SOCK_STREAM 或 SOCK_DGRAM ; protocol : 一般不填,默认为0。
Socket主要分为面向连接的Socket和无连接的Socket。 无连接Socket的主要协议是用户数据报协议,也就是常说的UDP, UDP Socket的名字是 SOCK_DGRAM 。创建套接字UDP/IP套接字,可以 调用 socket.socket() 。示例代码如下: udpSocket=socket.socket (AF_INET,SOCK_DGRAM)
socket对象的内置函数和属性
在Python语言中socket对象中,提供如表所示的内置函数。
UDP编程介绍
UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口 号,就可以直接发数据包。但是,能不能到达就不知道了。虽然用 UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议。
创建Socket时, SOCK_DGRAM 指定了这个Socket的类型是UDP。绑定端口和TCP一样,但是不需要调用 listen() 方法,而是直接接收来自任何客户端的数据。 recvfrom() 方法返回数据和客户端的地址与端口,这样,服务器收到数据后,直接调用 sendto() 就可以把数据用UDP发给客户端。
UDP编程的实现
【示例】UDP接收数据
#coding=utf-8
from socket import *
s = socket(AF_INET, SOCK_DGRAM) #创建套接字
#绑定接收信息端口
s.bind(('127.0.0.1', 8888)) #绑定一个端口,ip地址和端⼝号
print("等待接收数据!")
redata = s.recvfrom(1024) #1024表示本次接收的最⼤字节数
print(redata)
print(f'收到远程信息:{redata[0].decode("gbk")}, from {redata[1]}')
s.close()
【示例】UDP发送数据
from socket import *
s = socket(AF_INET, SOCK_DGRAM) #创建套接字
addr = ('127.0.0.1', 8888) #准备接收方地址
data = input("请输入:")
#发送数据时,python3需要将字符串转成byte
s.sendto(data.encode('gbk'),addr) #默认的网络助手使用的编码是gbk
s.close()
持续通信
【示例】UDP接收数据
#coding=utf-8
from socket import *
s = socket(AF_INET,SOCK_DGRAM) #创建UDP类型的套接字
s.bind(("127.0.0.1",8888)) #绑定端口,ip可以不写
print("等待接收数据!")
while True:recv_data = s.recvfrom(1024) #1024表示本次接收的最大字节数recv_content = recv_data[0].decode('gbk')print(f"收到远程信息:{recv_content},from {recv_data[1]}")if recv_content == "88":print("结束聊天!")break
s.close()
【示例】UDP发送数据
#coding=utf-8
from socket import *
s = socket(AF_INET,SOCK_DGRAM) #创建UDP类型的套接字
addr = ("127.0.0.1",8888)
while True:data = input("请输入:")s.sendto(data.encode("gbk"),addr)if data == "88":print("结束聊天!")break
s.close()
结合多线程实现UDP双向自由通信
UDP 不同于 TCP,不存在请求连接和受理过程,因此在某种意义上无法明确区分服务器端和客户端,只是因为其提供服务而称为服务器端。
如下服务端、客户端代码几乎一模一样,注意接收和发送端口对应,即可。
【示例】UDP实现多线程服务端
#coding=utf-8
from socket import *
from threading import Thread
udp_socket=socket(AF_INET,SOCK_DGRAM)
#绑定接收信息端口
udp_socket.bind(('127.0.0.1',8989))
#不停接收
def recv_data():while True:redata = udp_socket.recvfrom(1024)print(f'收到信息: {redata[0].decode("gbk")}, from {redata[1]}')
#不停发送
def send_data():while True:data=input('输入信息:')addr=('127.0.0.1',8080)udp_socket.sendto(data.encode('gbk'),addr)
if __name__=='__main__':# 创建两个线程t1=Thread(target=send_data)t2=Thread(target=recv_data)t2.start()t1.start()t1.join()t2.join()
【示例】UDP实现多线程客户端
#coding=utf-8
from socket import *
from threading import Thread
udp_socket=socket(AF_INET,SOCK_DGRAM)
#绑定接收信息端口
udp_socket.bind(('127.0.0.1',8080))
#不停接收
def recv_data():while True:redata = udp_socket.recvfrom(1024)print(f'收到信息: {redata[0].decode("gbk")}, from {redata[1]}')
#不停发送
def send_data():while True:data=input('输入信息:')addr=('127.0.0.1',8989)udp_socket.sendto(data.encode('gbk'),addr)
if __name__=='__main__':# 创建两个线程t1=Thread(target=send_data)t2=Thread(target=recv_data)t2.start()t1.start()t1.join()t2.join()
TCP编程介绍
面向连接的Socket使用的协议是TCP协议。TCP的Socket名称是 SOCK_STREAM 。创建套接字TCP套接字,可以调用 socket.socket() 。示例代码如下:
tcpSocket=socket.socket(AF_INET,SOCK_STREAM)
TCP编程的实现
在Python语言中创建Socket服务端程序,需要使用socket模块中的 socket类。创建Socket服务器程序的步骤如下:
(1) 创建Socket对象。
(2) 绑定端口号。
(3) 监听端口号。
(4) 等待客户端Socket的连接。
(5) 读取客户端发送过来的数据。
(6) 向客户端发送数据。
(7) 关闭客户端Socket连接。
(8) 关闭服务端Socket连接。
【示例】TCP服务器端接收数据
#coding=utf-8
from socket import *
server_socket = socket(AF_INET, SOCK_STREAM)
server_socket.bind(("", 8899))
server_socket.listen(5)
client_socket, client_info =
server_socket.accept()
#clientSocket 表示这个新的客户端
#clientInfo 表示这个新的客户端的ip以及port
recv_data = client_socket.recv(1024)
print(f"收到信息:{recv_data.decode('gbk')},来自:{client_info}")
client_socket.close()
server_socket.close()
【示例】TCP客户端发送数据到服务端
#coding=utf-8
from socket import *
client_socket = socket(AF_INET, SOCK_STREAM)
client_socket.connect(("127.0.0.1", 8899))
#注意:
# 1. tcp客户端已经链接好了服务器,所以在以后的数据发
送中,不需要填写对方的ip和port----->打电话
# 2. udp在发送数据的时候,因为没有之前的链接,所以需
要在每次的发送中,都要填写接收方的ip和port----->写信
client_socket.send("haha".encode("gbk"))
client_socket.close()
TCP双向持续通信
【示例】TCP:双向通信Socket之服务器端
#coding=utf-8
'''
双向通信Socket之服务器端读取客户端发送的数据,将内容输出到控制台将控制台输入的信息发送给客户器端
'''
#导入socket模块
from socket import *
#创建Socket对象
tcp_server_socket=socket(AF_INET,SOCK_STREAM)
#绑定端口
tcp_server_socket.bind(('', 8888))
#监听客户端的连接
tcp_server_socket.listen()
print("服务端已经启动,等待客户端连接!")
#接收客户端连接
tcp_client_socket,
host=tcp_server_socket.accept()
print("一个客户端建立连接成功!")
while True:#读取客户端的消息re_data=tcp_client_socket.recv(1024).decode('gbk')#将消息输出到控制台print('客户端说:',re_data)if re_data=='end':break#获取控制台信息msg=input('>')tcp_client_socket.send(msg.encode('gbk'))
tcp_client_socket.close()
tcp_server_socket.close()
【示例】TCP:双向通信Socket之客户端
#coding=utf-8
'''
双向通信Socket之客户端将控制台输入的信息发送给服务器端读取服务器端的数据,将内容输出到控制台
'''
#导入socket模块
from socket import *
#创建客户端Socket对象
tcp_client_socket=socket(AF_INET,SOCK_STREAM)
#连接服务器端
tcp_client_socket.connect(('127.0.0.1',8888))
while True:msg=input('>')#向服务器发送数据tcp_client_socket.send(msg.encode('gbk'))if msg=='end':break#接收服务器端数据re_data=tcp_client_socket.recv(1024)print('服务器端说:',re_data.decode('gbk'))
tcp_client_socket.close()
首先运行示例启动服务器端程序,然后运行示例客户端程序。执行结果如下图所示:
结合多线程实现TCP双向传送(自由聊天)
【示例】TCP服务端结合多线程实现自由收发信息
#coding=utf-8
'''
双向通信Socket之服务器端读取客户端发送的数据,将内容输出到控制台将控制台输入的信息发送给客户器端
'''
#导入socket模块
from socket import *
from threading import Thread
def recv_data():while True:# 读取客户端的消息re_data =
tcp_client_socket.recv(1024).decode('gbk')# 将消息输出到控制台print(f'客户端说:{re_data}')if re_data == 'end':break
def send_data():while True:# 获取控制台信息msg = input('>')tcp_client_socket.send(msg.encode('gbk'))
if __name__ == '__main__':# 创建Socket对象tcp_server_socket = socket(AF_INET,SOCK_STREAM)# 绑定端口tcp_server_socket.bind(('', 8888))# 监听客户端的连接tcp_server_socket.listen()print("服务端已经启动,等待客户端连接!")# 接收客户端连接tcp_client_socket, host = tcp_server_socket.accept()print("一个客户端建立连接成功!")t1 = Thread(target=recv_data)t2 = Thread(target=send_data)t1.start()t2.start()t1.join()t2.join()tcp_client_socket.close()tcp_server_socket.close()
【示例】TCP客户端结合多线程实现自由收发信息
#coding=utf-8
'''
双向通信Socket之客户端将控制台输入的信息发送给服务器端读取服务器端的数据,将内容输出到控制台
'''
#导入socket模块
from socket import *
from threading import Thread
def recv_data():while True:# 接收服务器端数据re_data = tcp_client_socket.recv(1024)print(f'\n服务器端说: {re_data.decode("gbk")}')
def send_data():while True:msg = input('>')# 向服务器发送数据tcp_client_socket.send(msg.encode('gbk'))if msg == 'end':break
if __name__ == '__main__':# 创建客户端Socket对象tcp_client_socket = socket(AF_INET,SOCK_STREAM)# 连接服务器端tcp_client_socket.connect(('127.0.0.1',8888))t1 = Thread(target=recv_data)t2 = Thread(target=send_data)t1.start()t2.start()t1.join()t2.join()tcp_client_socket.close()
关于http协议和服务器的授课顺序说明
由于大家还没有学习网页内容,考虑到更好的和实战结合。 所以,在讲服务器编程时,详细展开。
相关文章:

Python入门【TCP建立连接的三次握手、 TCP断开连接的四次挥手、套接字编程实战、 TCP编程的实现、TCP双向持续通信】(二十七)
👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误…...
React笔记-React入门
主要是现在要改一个开源项目,需要学习下React入门,在此记录一下。 几个关键的库 React底层核心:react.development.js React操作DOM库:react-dom.development.js 解析ES6语法:babel.min.js React.createElement() …...

SD WebUI 扩展:prompt-all-in-one
sd-webui-prompt-all-in-one 是一个基于 Stable Diffusion WebUI 的扩展,旨在提高提示词/反向提示词输入框的使用体验。它拥有更直观、强大的输入界面功能,它提供了自动翻译、历史记录和收藏等功能,它支持多种语言,满足不同用户的…...
Go和Java实现中介者模式
Go和Java实现中介者模式 下面通过一个同事之间相互通信的例子来说明中介者模式的使用。 1、中介者模式 中介者模式是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的 通信,并支持松耦合,使代码…...

CentOS系统环境搭建(十五)——CentOS安装Kibana
centos系统环境搭建专栏🔗点击跳转 关于Elasticsearch的安装请看CentOS系统环境搭建(十二)——CentOS7安装Elasticsearch。 CentOS安装Kibana 文章目录 CentOS安装Kibana1.下载2.上传3.解压4.修改kibana配置文件5.授予es用户权限6.kibana 后台…...

简单的洗牌算法
目录 前言 问题 代码展现及分析 poker类 game类 Text类 前言 洗牌算法为ArrayList具体使用的典例,可以很好的让我们快速熟系ArrayList的用法。如果你对ArrayList还不太了解除,推荐先看本博主的ArrayList的详解。 ArrayList的详解_WHabcwu的博客-CSD…...

vscode用ssh远程连接linux
1、vscode是利用ssh远程连接linux的,所以首先确保vscode已经安装了这两个插件 2、点击左下角的连接 3、选择Connect to Host…… 5、按格式输入 ssh 主机名ip 比如我的:ssh mnt192.168.198.128 6、选择第一个打开配置文件,确保输入正确 7、…...

chapter 3 Free electrons in solid - 3.2 量子自由电子理论对一些现象的解释
3.2 自由电子气的热容 Heat capacity of free electron gas 3.2.1 计算自由电子的热容 Calculation of Heat Capacity of free Electrons T>0K, total energy of free electrons: E ∫ E d N 3 5 N e E F 0 [ 1 5 12 π 2 ( k B T E F 0 ) 2 ] E \int EdN \frac{3}{5}…...
vue实现打印功能
在Vue应用中调用打印机功能,可以使用JavaScript的window.print()方法。这个方法会打开打印对话框,然后让我们选择打印设置并打印文档,但是尼这种方法依赖于浏览器的打印功能。 以下是一个简单的示例,演示如何在Vue组件中调用打印…...

golang—面试题大全
目录标题 sliceslice和array的区别slice扩容机制slice是否线程安全slice分配到栈上还是堆上扩容过程中是否重新写入go深拷贝发生在什么情况下?切片的深拷贝是怎么做的copy和左值进行初始化区别slice和map的区别 mapmap介绍map的key的类型map对象如何比较map的底层原…...
Spring、Springboot、SpringCloud--包含的知识点大全
类型难度AOPspring-自定义AOP面向切面注解--统一切面处理-登陆信息采集快速入门SpringbootAOP实现切面处理请求Demo线程池通俗易懂的线程池底层原理,一文知所有数据结构数据结构-链表篇数据结构--数组篇数据结构之-concurrentHashMap源码分析JVMJVM调优及各种问题处…...

MongoDB:数据库初步应用
一.连接MongoDB 1.MongoDBCompass连接数据库 连接路径:mongodb://用户名:密码localhost:27017/ 2.创建数据库(集合) MongoDB中数据库被称为集合. MongoDBCompass连接后,点击红色框加号创建集合,点击蓝色框加号创建文档(数据表) 文档中的数据结构(相当于表中的列)设计不用管…...

C#之枚举中的按位与()按位或(|)。
一些基础定义: 按位或运算符(|)是一种位运算符,用来对两个二进制数进行操作。对于每个位上的1,如果至少有一个二进制数中的对应位为1,则结果为1;否则,结果为0。按位与运算符&#x…...

Blazor前后端框架Known-V1.2.12
V1.2.12 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行。 Gitee: https://gitee.com/known/KnownGithub:https://github.com/known/Known 概述 基于C#和Blazo…...

bug记录:微信小程序 给button使用all: initial重置样式
场景:通过uniapp开发微信小程序 ,使用uview的u-popup弹窗,里面内嵌了一个原生button标签,因为微信小程序的button是有默认样式的,所以通过all: initial重置样式 。但是整个弹窗的点击事件都会被button上面的点击事件覆…...

【计算机视觉|生成对抗】带条件的对抗网络进行图像到图像的转换(pix2pix)
本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题:Image-to-Image Translation with Conditional Adversarial Networks 链接:Image-to-Image Translation with Conditional Adversarial Networks | IEEE Conference Publicati…...
[时序数据库]:InfluxDB进阶
文章目录 1 摘要2 背景2.1 问题一:针对Influx V2.0工具2.2 问题二:针对Influx查询语言 3 需求分析4 快速入门4.1 客户端驱动版本选择4.2 连接influx4.2.1 influx配置信息4.2.2 influx连接配置4.2.3 测试连通情况 5 Influx工具类5.1 InfluxQL工具类5.1.1 …...

uniapp编写微信小程序遇到的坑总结
1、阻止事件冒泡 使用uniapp开发微信小程序的时候,发现使用click.stop来阻止事件冒泡没有作用,点击了之后发现仍然会触发父组件或者祖先组件的事件。 在网上查阅,发现使用tap.stop才能阻止事件冒泡。 2、二维码生成 在网上找了很多&…...
Binary operator ‘*‘ cannot be applied to two ‘Double?‘ operands
在 swift 中声明 Double 类型参数变量在进行运算处理时抛出了如下异常 Binary operator * cannot be applied to two Double? operands 情况一 参数类型不匹配,需将参数类型进行匹配 self.max height / (length * width) // 初始 self.max height / (length * Double(wid…...

C#如何打包EXE程序生成setup安装文件
项目结束之后,有需要将winForm程序打包成.exe文件提供给用户。 这里记录一下打包过程。 1:首先获取打包插件,如果你的VS已经安装,忽略此步骤。 点击 工具->扩展和更新,选择联机,搜索installer&#x…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...

LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...