Python 网络编程实践:从基础到进阶

目录

网络编程

一.IP地址简介

1. IP 地址的概念

1.1. IP 地址的表现形式 

1.2. IP 地址的作用

2. 查看 IP 地址 

3. 检查网络是否正常

4. 小技巧

二.端口和端口号

1. 什么是端口

2. 什么是端口号

3. 端口和端口号的关系

4. 端口号的分类¶

4.1. 知名端口号

4.2. 动态端口号

5. 小结

根据PID或端口号互查

三.socket简介

1.问题思考

2.socket 的概念

3socket 的作用

4socket 使用场景

5小结

四.字符串数据编解码

五.TCP介绍

TCP通信模型

TCP服务端开发流程

六TCP客户端&服务端

1.TCP客户端

1.1. 开发步骤

1.2. 参考代码

1.2. 参考代码

1.2.1. TCP客户端发送数据

1.1开发步骤

1.2参考代码

2.TCP服务端

2.1开发步骤

2.2参考代码

2.2.3允许客户端多次连接

3.TCP应用程序开发总结 

七.UDP介绍 

1. UDP简介

2. UDP的特点

3. UDP和TCP的区别

4. UDP接收和发送流程 

八.UDP发送端&接收端 

1. UDP发送端

1.1. 实现步骤

1.2. 核心方法

1.3. 参考代码

2. UDP接收端

2.1. 实现步骤

2.2. 核心方法

2.3. 参考代码

3. UDP发广播

3.1. 什么是广播?

3.2. 实现步骤

 3.3. 核心方法

3.4. 参考代码

3.5. 广播地址计算

4. 总结


网络编程

网络是将具有独立功能的多台计算机通过通信线路和通信设备连接起来,在网络管理软件及网络通信协议下,实现资源共享和信息传递的虚拟平台。

能够编写基于网络通信的软件或程序,通常来说就是网络编程

连接通信设备需要知道设备的ip以及端口号.

一.IP地址简介

1. IP 地址的概念

IP 地址就是标识网络中设备的一个地址,好比现实生活中的家庭地址。网络中的设备效果图:

1.1. IP 地址的表现形式 

说明:

  • IP 地址分为两类: IPv4IPv6
  • IPv4 是目前使用的ip地址,IPv6 是未来使用的ip地址
  • IPv4 是由点分十进制组成,IPv6 是由冒号十六进制组成

1.2. IP 地址的作用

IP 地址的作用是标识网络中唯一的一台设备的,也就是说通过IP地址能够找到网络中某台设备。

IP地址作用效果图:

2. 查看 IP 地址 

  • inux 和 mac OS 使用 ifconfig 这个命令
  • Windows 使用 ipconfig 这个命令

说明:

ifconfigipconfig 都是查看网卡信息的,网卡信息中包括这个设备对应的IP地址

说明:

  • 192.168.1.107是设备在网络中的IP地址
  • 127.0.0.1表示本机地址,提示:如果和自己的电脑通信就可以使用该地址。
  • 127.0.0.1该地址对应的域名是localhost
  • 域名是 ip 地址的别名,通过域名能解析出一个对应的ip地址。

查看公网IP:

国内网络:互连协议查询 - IP查询 - 查IP(www.cip.cc)

国外网络:What Is My IP Address? Free IP Lookup

3. 检查网络是否正常

  • 检查网络是否正常使用 ping 命令

检查网络是否正常效果图

  • ping www.baidu.com 检查是否能上公网
  • ping 当前局域网的ip地址 检查是否在同一个局域网内
  • ping 127.0.0.1 检查本地网卡是否正常

4. 小技巧

可以使用Python自带的http.server模块创建文件服务器

# 80指的是端口号port,别人可以在浏览器通过IP+port的形式访问,例如192.168.38.58:80
python -m http.server 80

二.端口和端口号

问题思考
不同电脑上的飞秋之间进行数据通信,它是如何保证把数据给飞秋而不是给其它软件呢?
其实,每运行一个网络程序都会有一个端口,想要给对应的程序发送数据,找到对应的端口即可。

端口效果图:

1. 什么是端口

端口是传输数据的通道,好比教室的门,是数据传输必经之路。

那么如何准确的找到对应的端口呢?

其实,每一个端口都会有一个对应的端口号,好比每个教室的门都有一个门牌号,想要找到端口通过端口号即可。

端口号效果图:

2. 什么是端口号

操作系统为了统一管理这么多端口,就对端口进行了编号,这就是端口号,端口号其实就是一个数字,好比我们现实生活中的门牌号,每个电脑的端口号有65536个。

那么最终飞秋之间进行数据通信的流程是这样的,通过ip地址找到对应的设备,通过端口号找到对应的端口,然后通过端口把数据传输给应用程序

最终通信流程效果图:

3. 端口和端口号的关系

端口号可以标识唯一的一个端口。

4. 端口号的分类¶

4.1. 知名端口号

知名端口号是指众所周知的端口号,范围从0到1023。

这些端口号一般固定分配给一些服务,比如21端口分配给FTP文件传输协议文件传输协议服务,25端口分配给SMTP(简单邮件传输协议)服务,80端口分配给HTTP服务。

4.2. 动态端口号

一般程序员开发应用程序使用端口号称为动态端口号, 范围是从1024到65535。

如果程序员开发的程序没有设置端口号,操作系统会在动态端口号这个范围内随机生成一个给开发的应用程序使用。

当运行一个程序默认会有一个端口号,当这个程序退出时,所占用的这个端口号就会被释放。

5. 小结

  • 端口的作用就是给运行的应用程序提供传输数据的通道
  • 端口号的作用是用来区分和管理不同端口的,通过端口号能找到唯一个的一个端口
  • 端口号可以分为两类: 知名端口号动态端口号
  • 知名端口号的范围是0到1023
  • 动态端口号的范围是1024到65535

根据PID或端口号互查

数值代指:端口号或进程ID

# windows
netstat -ano | findstr "11816"

# mac or liunx 
netstat -anp | grep "11816"

三.socket简介

1.问题思考

到目前为止我们学习了 ip 地址和端口号,为了能够找到对应设备我们需要使用 ip 地址,为了区别某个端口的应用程序接收数据我们需要使用端口号,那么通信数据是如何完成传输的呢?
使用 socket 来完成

2.socket 的概念

socket (简称 套接字) 是进程之间通信一个工具,好比现实生活中的插座,所有的家用电器要想工作都是基于插座进行,进程之间想要进行网络通信需要基于这个 socket。

socket 效果图

3socket 的作用

负责进程之间的网络数据传输,好比数据的搬运工。

4socket 使用场景


不夸张的说,只要跟网络相关的应用程序或者软件都使用到了 socket 。


5小结

进程之间网络数据的传输可以通过 socket 来完成,socket 就是进程间网络数据通信的工具。

四.字符串数据编解码

网络通信传递的数据格式
网络传输是以二进制数据进行传输的。
在网络传输数据时,数据需要先编码转为二进制(bytes)数据类型。
所以,发送端需要把字符串类型数据转换为bytes类型数据;接收端收到数据之后,需要把bytes类型再转换为字符串类型使用。


数据转换
字符串和bytes之间的转换方法如下:

函数名

说明

str.encode()

编码:将字符串转化为字节码

bytes.decode()

解码:将字节码转化为字符串

字符串的编解码示例

# 将字符串类型转换为bytes类型 encoding参数表示编码方式

bytes数据 = str字符串.encode(encoding='utf-8')

# 将bytes类型转换为字符串类型 encoding参数表示编码方式

str字符串 = bytes数据.decode(encoding='utf-8')

五.TCP介绍

TCP 的概念
之前我们学习了 IP 地址和端口号,网络应用程序之间进行通信时,通过 IP 地址能够找到对应的设备,然后再通过端口号找到对应的端口,再通过端口把数据传输给应用程序,这里要注意,数据不能随便发送,在发送之前还需要选择一个对应的传输协议,保证程序之间按照指定的传输规则进行数据的通信, 而这个传输协议就是我们今天学习的 TCP。

TCP 的英文全拼(Transmission Control Protocol)简称传输控制协议,它是一种面向连接的、可靠的、基于字节流的传输层通信协议。

TCP通信需要经过创建连接、数据传送、终止连接三个步骤。

面向连接的效果图


TCP通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中,打电话

无标题49-1.png

TCP,先建立连接再通信

先生你好,廊坊一手好房源考虑吗

嗯,妹儿啊,有什么好房子,我考虑下

好,我给您介绍下

%&#%..¥*&(...

无标题888-1.png


TCP特点
面向连接
通信双方必须先建立连接才能进行数据的传输,双方都必须为该连接分配必要的系统内核资源,以管理连接的状态和连接上的传输。
双方间的数据传输都可以通过这一个连接进行。完成数据交换后,双方必须断开此连接,以释放系统资源。
这种连接是一对一的,因此TCP不适用于广播的应用程序,基于广播的应用程序请使用UDP协议。
可靠传输
1TCP采用发送应答机制:TCP发送的每个报文段都必须得到接收方的应答才认为这个TCP报文段传输成功
2超时重传:发送端发出一个报文段之后就启动定时器,如果在定时时间内没有收到应答就重新发送这个报文段。
3错误校验:TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
4流量控制和阻塞管理:流量控制用来避免主机发送得过快而使接收方来不及完全收下。

总而言之:TCP 是一个稳定、可靠的传输协议,常用于对数据进行准确无误的传输,比如: 文件下载,浏览器上网。
TCP拓展知识
TCP的三次握手
所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发


整个流程如下图所示:

TCP三次握手流程


(1)第一次握手:客户端将数据包发送给Server,等待Server确认。
(2)第二次握手:Server收到数据包后知道Client请求建立连接,发送数据包发送给Client以确认连接请求。
(3)第三次握手:Client收到确认后,发送数据包发送给Server,Server检查数据包,如果正确则连接建立成功,完成三次握手,随后Client与Server之间可以开始传输数据了。
TCP的四次挥手
TCP的4次挥手,主要是说TCP断开链接的时候需要经过4次确认.


第一次挥手: 主机1(可以是客户端,也可以是服务器端)向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;
第二次挥手: 主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段告诉主机1,我也没有数据要发送了,可以进行关闭连接了;
第三次挥手: 主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入CLOSE_WAIT状态;
第四次挥手: 主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL(Maximum Segment Lifetime 报文最大生存时间)后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。

TCP网络程序开发流程
TCP 网络应用程序开发分为:
1TCP 客户端程序开发:指运行在用户设备上的程序
2TCP 服务端程序开发:指运行在服务器设备上的程序,为客户端提供数据服务。

TCP通信模型

TCP客户端开发流程
1创建客户端套接字对象
2和服务端套接字建立连接
3发送数据
4接收数据
5关闭客户端套接字

TCP服务端开发流程

1创建服务端端套接字对象
2绑定端口号
3设置监听
4等待接受客户端的连接请求
5接收数据
6发送数据
7关闭套接字 

小结
●TCP 网络应用程序开发分为客户端程序开发和服务端程序开发。
●主动发起建立连接请求的是客户端程序
●等待接受连接请求的是服务端程序

六TCP客户端&服务端

1.TCP客户端

tcp的客户端要比服务器端简单很多,tcp和服务端建立连接后,直接发送数据

1.1. 开发步骤

  1. 导入socket模块
  2. 创建socket套接字
  3. 建立tcp连接(和服务端建立连接)
  4. 开始发送数据(到服务端)
  5. 关闭套接字

1.2. 参考代码

1.2. 参考代码

1.2.1. TCP客户端发送数据
# 1、导入socket模块
import socket
# 2、创建socket
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 3、建立tcp连接
tcp_client_socket.connect(("192.168.23.247", 7878))
# 4、开始发送数据
tcp_client_socket.send("哈哈哈,打不过我吧!?".encode())
# 5、关闭套接字
tcp_client_socket.close()


1.1开发步骤

1导入socket模块
2创建socket套接字
3建立tcp连接(和服务端建立连接)
4开始发送数据(到服务端)
5关闭套接字 

1.2参考代码

1.2.1TCP客户端发送数据
1.2.2TCP客户端发送并接收数据
1.3关键方法回顾
●socket.socket(socket.AF_INET, socket.SOCK_STREAM)
创建socket套接字对象,socket.AF_INET代表IPv4,socket.SOCK_STREAMTCP数据流
●socket.connect(address)
主动初始化TCP服务器连接,一般address的格式为元组(hostname, port),如果连接出错,返回socket.error错误。
●socket.send(要发送的数据)
向服务端发送数据,此处的数据必须是二进制类型(字符串则需要编码)
●socket.recv(缓冲区大小)
接收TCP数据,数据以二进制形式返回,bufsize指定要每次接收的最大数据量。

2.TCP服务端

tcp服务器:和客户端建立连接后,接收/发送数据给客户端


2.1开发步骤

1socket创建一个套接字
2bind绑定ip和port
3listen使套接字设置为被动模式
4accept等待客户端的链接
5recv/send接收发送数据

2.2参考代码

2.2.1接收客户端消息并回复
2.2.2接受客户端发来的多条信息



2.2.3允许客户端多次连接

# tcp 服务端:

import socket

# 1、创建套接字

tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 2、绑定ip和端口

tcp_server_socket.bind(("192.168.174.87", 8081))

# 3、监听(让套接字由主动变为被动),只能接受客户端连接

tcp_server_socket.listen(128)

# 4、接收客户端连接

# 此处while True作用是可以接收客户端多次连接

while True:

# 每个客户端连接成功后,分配一个新的套接字

new_client_socket, ip_port = tcp_server_socket.accept()

print("【新客户端来了】:", ip_port)

# 5、开始数据传输, recv

# 此处的while True,表示可以多次接收客户端的消息

while True:

recv_content = new_client_socket.recv(1024)

# 如果客户端断开了连接,此时recv_content 接收到的数据为空

if recv_content:

# 保存客户端发来的信息

re_text = recv_content.decode("gbk")

print("收到客户端信息:", re_text)

# 回复客户端

new_client_socket.send("好的,收到.".encode())

else:

print("客户端可能断开连接!")

break



# 6、关闭和当前客户端的连接,当前客户端不能在进行通信了

new_client_socket.close()

# 7、关闭服务器(服务器不再接受新的客户端连接),服务器不再接收新的客户端连接(老的连接,继续服务)

tcp_server_socket.close()

注意,仔细想想不难发现,这里同时还是只能有一个客户端接入进来。

3.TCP应用程序开发总结 


1TCP 客户端程序想要和 TCP 服务端程序进行通信时必须要先建立连接
2TCP 客户端程序一般不需要绑定端口号(会自动随机分配),因为客户端是主动发起建立连接的。
3TCP 服务端程序必须绑定端口号,否则客户端找不到这个 TCP 服务端程序。
4执行 listen 后的socket套接字是被动套接字,只负责接收新的客户端的连接请求,不能收发消息。
5当 TCP 客户端程序和 TCP 服务端程序连接成功后, TCP 服务端会会客户端产生一个新的套接字,收发客户端消息使用该套接字。
6TCP服务端关闭 accept 返回的新套接字意味着和这个客户端已经通信完毕。
7TCP服务端关闭自己的套接字意味着服务端关闭了,新的客户端不能连接服务端,但是之前已经接成功的客户端还能正常通信。
8当客户端的套接字 close 后,服务器端的 recv 会解除阻塞,返回的数据长度为0;此时,服务端可以通过返回数据的长度来判断客户端是否已经下线,
9反之,如果服务端为客户端创建的的套接字对象 close 后,客户端的 recv 也会解阻塞,返回的数据长度也为0。

七.UDP介绍 

1. UDP简介

UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。

由于使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输例如视频会议都使用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议。

UDP传输的每个数据包被限制在64K以内(数据包大小由一个16位的无符号整数记录)。

 

UDP (User Datagram Protocol )不提供复杂的控制机制, 如果传输过程中出现丢包, UDP 也不负责重发. 甚至当出现包到达顺序乱掉时候也没有纠正的功能. 由于 UDP 面向无连接, 它可以随时发送数据. 再加上 UDP 本身的处理既简单又高效, 因此常用于以下几个方面:

  • 包总量较少的通信(DNS).
  • 视频、音频等多媒体通信(即时通信).
  • 限定于 LAN 等特定网络中的应用通信.
  • 广播通信(广播、多播)

2. UDP的特点

  • 需要资源少
  • 不保证接收
  • 无连接

3. UDP和TCP的区别

UDP

TCP

面向无连接

面向有连接

支持一对一、一对多、多对一、和多对多的通信

只能有两个端点,实现一对一的通信

不保证数据传输的可靠性

传输数据无差错,不丢失,不重复,且按时序到达

占用资源较

占用资源较

4. UDP接收和发送流程 

八.UDP发送端&接收端 

1. UDP发送端

1.1. 实现步骤

  1. 导入模块socket
  2. 创建socket套接字
  3. 绑定IP&端口(可选)
  4. 发送数据
  5. 关闭套接字

1.2. 核心方法

UDP 发送数据的几个关键方法:

  • socket.socket —— 创建套接字
"""
socket 参数说明
1. socket.AF_INET       表示 IPv4 地址
2. socket.SOCK_DGRAM    表示使用 UDP 协议传输数据
"""
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  • socket.bind((IP地址, 端口号)) —— 绑定到一个地址(可选)

这个地址必须是没有被占用的,否则会连接失败。不进行bind,系统会随机分配一个端口


#         ip地址           端口号
addr = ("192.168.23.122", 3333)
udp_socket.bind(addr)
  • socket.sendto —— 发送数据
"""
sendto 参数说明
1. 要发送的二进制数据
2. 元组类型,指定把 (参数 1 的数据) 发送给谁
   (ip 地址字符串,端口数值)
"""
udp_socket.sendto("你好".encode(), ("127.0.0.1", 8888))
  • socket.close —— 关闭套接字
# 4. 关闭套接字(close)
udp_socket.close()

1.3. 参考代码

#coding=utf-8
# 导入socket模块
import socket

# 创建socket
# AF_INET 表示IPv4地址
# SOCK_DGRAM 表示使用udp 协议
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

addr = ("192.168.23.122", 3333)
# 发送端绑定,绑定发送端的ip和端口(可选)
udp_socket.bind(addr)

# 设置内容
data_str = "哈哈,我来自火星!~"

# 把文本内容转码,转成二进制数据
data_bytes = data_str.encode("utf-8")

# 发送数据
# ("192.168.23.221", 8080) 接收数据方ip地址和端口
udp_socket.sendto(data_bytes, ("192.168.23.221", 8080))

# 关闭数据
udp_socket.close()

2. UDP接收端

2.1. 实现步骤

  1. 导入模块socket
  2. 创建socket套接字
  3. 绑定端口号(必选)
  4. 接收数据
  5. 关闭套接字

2.2. 核心方法

使用bind() 在接收数据前绑定自己主机的IP地址和端口

  • socket.recvfrom(缓冲区大小)—— 接受UDP套接字的数据。
socket.recvfrom(1024) 使用udp方式接收数据,每次接收1024个字节
  • decode()—— 解码,把二进制数据解码为 字符串 类型
str = data.decode() 把data 解码为字符串并且保存到 str变量中

2.3. 参考代码

#coding=utf-8

from socket import *

# 1. 创建套接字
udp_socket = socket(AF_INET, SOCK_DGRAM)

# 2. 绑定本地的相关信息,如果一个网络程序不绑定,则系统会随机分配
local_addr = ('', 7788) #  ip地址和端口号,ip一般不用写,表示本机的任何一个ip
udp_socket.bind(local_addr)

# 3. 等待接收对方发送的数据
recv_data = udp_socket.recvfrom(1024) #  1024表示本次接收的最大字节数

# 4. 显示接收到的数据
print(recv_data[0].decode('gbk'))

# 5. 关闭套接字
udp_socket.close()

3. UDP发广播

3.1. 什么是广播?

3.2. 实现步骤

  1. 导入模块socket
  2. 创建socket套接字
  3. 设置允许发送广播
  4. 发送广播数据(注意广播地址)
  5. 关闭套接字

 3.3. 核心方法

  • socket.setsockopt —— 设置允许发送广播
udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, True)

3.4. 参考代码

import socket

# 建立udp套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 发送消息
send_content = "大家好,我是渣渣辉~"

# 把文本转为二进制数据
send_data = send_content.encode("utf-8")

# 设置允许发送广播
udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, True)

# 发送消息
udp_socket.sendto(send_data, ("192.168.1.255", 9090))

# 关闭套接字
udp_socket.close()

3.5. 广播地址计算

广播地址要根据当前局域网IP和子网掩码得到,在线生成网站:子网掩码计算器-在线工具

例如:

Window使用ipconfig,Linux/Mac使用ifconfig查看当前网络IPv4地址和子网掩码

当前电脑网卡IP:192.168.23.222

网卡子网掩码:255.255.255.0 ,即掩码位为24(11111111, 11111111, 11111111, 00000000)

 

4. 总结

  • 一个udp网络程序,可以不绑定,此时操作系统会随机进行分配一个端口,如果重新运行此程序端口可能会发生变化
  • 一个udp网络程序,也可以绑定信息(ip地址,端口号),如果绑定成功,那么操作系统用这个端口号来进行区别收到的网络数据是否是此进程的

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Unity学习笔记】第十四 Prefab 概念解惑

目录 1 prefab、prefab变体、prefab覆盖和prefab 嵌套2 connect 与unpack3 prefab到底是什么,它和gameobject又有什么区别?4 为什么要用prefab?5 代码动态加载prefab6 为什么我unity PrefabUtility.InstantiatePrefab() 得到的是null7 Prefab…

基于Springboot的租房网站

基于SpringbootVue的租房网站的设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 首页 房屋信息 交流论坛 房屋资讯 后台登录 用户管理 房屋类型管理 房屋信息管理 预…

关于权限的设计

首先系统权限,每个账号登录后,都需要知道这个账号允许访问哪些api,哪些数据权限(一般是指其他账号的一些数据) 这里就需要通过角色来关联。 --1.角色绑定菜单,每个菜单设计的时候包含了这个菜单会用到的所…

【成功案例】利用多款国产内网渗透工具勒索数十台虚拟机的babyk解密恢复项目

1.背景 2024年4月11日,某影视公司的服务器遭受了勒索软件攻击,随后向我司寻求帮助进行恢复。经过我司溯源排查,勒索组织通过一处用友NC资产进行入侵,攻击者利用国产工具横移了数小时后实施勒索。其中一台超融合(vcente…

监控员工上网有什么软件(2024三款受欢迎的员工上网监控软件盘点)

企业对员工上网行为的有效监管显得愈发重要。 既要确保工作效率与信息安全,又要尊重员工隐私并遵守相关法律法规,选择一款功能强大、合规且易于使用的员工上网监控软件至关重要。 本文将为您介绍2024年三款备受市场欢迎的员工上网监控软件,以…

20232801 2023-2024-2 《网络攻防实践》实践八报告

20232801 2023-2024-2 《网络攻防实践》实践八报告 1.实践内容 1.动手实践任务: 对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者. 2.动手实践任务二:分析Crackme程序 在WinXP Attac…

LeetCode 每日一题 ---- 【1017.负二进制转换】

LeetCode 每日一题 ---- 【1017.负二进制转换】 1017.负二进制转换方法一:模拟进制转换推广:任意进制转换 1017.负二进制转换 方法一:模拟进制转换 我们平常做进制转换最常用的方法就是辗转相除法,下面的图示分别给出了普通的10…

pmp培训哪家好?高通过率的靠谱机构如何选择

PMP培训机构的选择本来就是一个需要有挑选的人才能顺利进行,所以如果你正好是PMP小白的话一定要抓紧补充一下自己在挑选机构方面的知识,理清自己的需求才能进行多维度的挑选,最后才能选择一个比较合适的机构。已经换证一次的老鸟路过&#xf…

Linux网络开发基础知识

一个网络服务器的简单实现 项目需求 实现回声服务器的客户端/服务器程序&#xff0c;客户端通过网络连接到服务器&#xff0c;并发送任意一串英文信息&#xff0c;服务器端接收信息后&#xff0c; 将每个字符转换为大写并回送给客户端显示。 eoch_client.c #include <arpa/i…

利用RunnerGo数据大屏强化测试管理与决策

测试平台中的数据大屏在提供实时监控、统计分析、效率提升、制定策略和促进沟通等方面具有重要的意义。它为测试团队提供更全面、更直观的数据支持&#xff0c;有助于提高测试质量和效率&#xff0c;减少风险&#xff0c;并加强团队协作和沟通。 数据大屏也是RunnerGo的核心特…

软考高级 | 系统架构设计师笔记(二)

三. 软件架构设计 3.1 概述 a 定义 软件或计算机系统的软件架构是该系统的一个&#xff08; 或多个&#xff09; 结构&#xff0c; 而结构由软件元素、 元 素的外部可见属性及它们之间的关系组成。 软件系统架构是关于软件系统的 结构、 行为和属性 的高级抽象。 指定…

【车辆管理】车辆位置监控管理方案

车辆位置监控管理方案 位置管理模块&#xff0c;实现管理车辆基于位置的管理功能。包括实时位置追踪、历史轨迹回放、电子围栏配置等功能。模块关键功能如下&#xff1a; 1、实时位置调度 应用公网的无线传输作为数据传输的载体&#xff0c;真正地实现对车辆位置的全天候实时…

OLED(SSD1306+I2C协议显示屏模块)

工具 1.Proteus 8 仿真器 2.keil 5 编辑器 原理图 讲解 简介 OLED&#xff08;Organic Light-Emitting Diode&#xff09;显示屏&#xff0c;即有机发光二极管显示屏&#xff0c;是一种新型显示技术。它的工作原理是通过电流驱动有机材料发光&#xff0c;无需背光灯&#x…

MyBatis 插件介绍及应用

MyBatis 插件介绍及应用 MyBatis 是一个持久层框架&#xff0c;它允许开发者自定义 SQL 语句并将其映射到 Java 对象中。MyBatis 提供了一种灵活的数据库操作方式&#xff0c;但随着项目的复杂度增加&#xff0c;一些通用功能如分页、缓存、事务管理等可能需要重复编写。为了解…

【网络原理】IP协议的地址管理和路由选择

系列文章目录 【网络通信基础】网络中的常见基本概念 【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序&#xff08;万字博文&#xff09; 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制&#xff08;CRC算法、MD5算法&#xff09; 【网络…

uniapp-vue3-wechat:基于uniapp+vue3仿微信app聊天实例(H5+小程序+App端)

uni-vue3-wchat&#xff1a;基于uni-appvue3pinia2高仿微信app聊天模板。 原创基于最新跨端技术uni-appvue3.xpinia2vite4uv-ui构建三端仿微信app界面聊天实例。实现编辑框多行消息/emoj混合、长按触摸式仿微信语音面板、图片/视频预览、红包/朋友圈等功能。支持编译到H5小程序…

unity3d使用3D WebView播放网页中的视频

Unity2021.3.35f1&#xff0c;硬件ESP32-Cam&#xff0c;3D WebView插件 1.新建工程&#xff0c;导入3D WebView for Winfows和3D WebView for Android 2.打开场景Assets\Vuplex\WebView\Demos\Scenes\2_CanvasWebViewDemo 3.修改Canvas的Render Mode为Screen Space-Camera&am…

Spark持久化、broadcast广播变量和accumulator累加器

持久化操作 什么是持久化&#xff0c;为什么要持久化 Spark中最重要的功能之一是跨操作在内存中持久化&#xff08;或缓存&#xff09;数据集。当您持久化RDD时&#xff0c;每个节点将其计算的任何分区存储在内存中&#xff0c;并在该数据集&#xff08;或从该数据集派生的数…

AI大模型日报#0429:人大多模态Awaker1.0、清华「AI+材料」落地、微软小模型Orca-Math、GenAI黄金法则

导读&#xff1a; 欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了今日要点以及每条资讯的摘要。AI大模型日报今日要点&#xff1a; 中山大学与重庆大学合作开发的基于Transformer的单细胞注释方法SANGO在跨样本、平台和组织…

平安城市 校园 景区 停车场网络语音对讲立柱SV-11TS

平安城市 校园 景区 停车场网络语音对讲立柱SV-11TS 长方形立柱式设计&#xff0c;外观简约&#xff0c;线条优美&#xff0c;工艺考究&#xff0c;坚固耐用可一键实现在紧急情况下求助报警、事件咨询&#xff0c;与SIP网络对讲主机进行全双工对讲。内置警示灯&#xff0c;呼叫…