【100天精通python】Day46:python网络编程_网络编程基础与入门

news2024/9/24 1:22:24

目录

专栏导读 

1 网络编程的基础

2. 基本概念和协议

2.1 计算机网络基础

2.2 网络协议、IP地址、端口号

2.3  常见网络协议

3. 套接字编程

3.1 套接字的基本概念

3.2 套接字的基本操作

3.3 套接字通信模型和方法:send、recv

3.3.1 TCP通信模型

3.3.2 UDP通信模型

4. 客户端-服务器模型

4.1 客户端的角色

4.2  服务器的角色

4.3 客户端-服务器的交互

4.4 创建简单的客户端和服务器通信示例:

5. WebSocket编程

6. 异步编程和多线程

7. 数据安全和加密

7.1 数据加密与隐私保护

7.2 输入验证和过滤

7.3 防范跨站脚本攻击(XSS)

7.4 防范SQL注入

   7.5 安全更新和漏洞修复

8. 身份验证和授权

8.1 用户身份验证的方法和技术

8.2 实现用户登录和访问控制

8.3 使用JWT进行身份验证


 专栏导读 

专栏订阅地址:https://blog.csdn.net/qq_35831906/category_12375510.html


1 网络编程的基础

        网络编程是指利用计算机网络在不同计算机之间进行数据交换和通信的过程。它涵盖了多个层次,从底层的数据传输、协议交互到高层的应用程序开发。

  1. 协议(Protocol): 协议是规定计算机之间通信方式的一套规则和标准。网络通信必须遵循特定的协议,以确保数据正确地在发送和接收之间传输。常见的网络协议包括TCP、UDP、HTTP、HTTPS、FTP、SMTP等。

  2. IP地址(IP Address): IP地址是用于在网络上标识计算机和设备的唯一地址。IP地址分为IPv4和IPv6两种版本。IPv4地址是由四个用点分隔的十进制数字组成(例如:192.168.0.1),而IPv6地址使用更长的十六进制数字串。

  3. 端口号(Port Number): 端口号用于标识计算机上不同应用程序的通信通道。一个IP地址可以有多个端口,每个端口对应一个应用程序。端口号是一个16位的整数,范围从0到65535。

  4. 套接字(Socket): 套接字是网络通信的基本操作接口,它用于在计算机之间建立连接并传输数据。套接字包括IP地址、协议和端口号,通过它可以实现不同计算机之间的通信。

  5. 客户端(Client)和服务器(Server): 客户端是发起网络请求的计算机或应用程序,服务器是接收和处理这些请求的计算机或应用程序。客户端发送请求,服务器响应并提供相应的服务。

  6. HTTP(Hypertext Transfer Protocol): HTTP是一种用于在Web上传输数据的协议,它基于客户端-服务器模型。客户端发送HTTP请求,服务器返回HTTP响应。HTTP支持GET、POST、PUT、DELETE等请求方法。

  7. TCP(Transmission Control Protocol): TCP是一种面向连接的协议,它提供可靠的数据传输和错误校验。TCP通过建立连接、数据分割和重新组装,确保数据按顺序、无丢失地传输。

  8. UDP(User Datagram Protocol): UDP是一种无连接的协议,它不提供数据传输的可靠性和错误校验,但速度较快。UDP适用于实时通信,如音频和视频传输。

  9. 数据包(Packet): 数据在网络上以数据包的形式传输。每个数据包包含有关数据的信息,例如源IP地址、目标IP地址、端口号等。数据包可能在传输过程中被分割、重新排序或重传。

  10. 域名(Domain Name): 域名是人类可读的网址,用于标识网站或服务器。域名通过DNS解析为IP地址,使用户可以使用易记的域名访问网站。

  11. DNS(Domain Name System): DNS是一个分布式数据库系统,将域名映射到IP地址,以便计算机可以在互联网上定位其他计算机。它允许使用人类可读的域名来访问资源。

        网络编程在现代计算机世界中扮演着重要的角色,它支持了互联网、Web应用、实时通信、分布式系统等多个领域。

2. 基本概念和协议

2.1 计算机网络基础

         计算机网络是多台计算机和设备通过通信链路相互连接,共享资源和信息的集合。网络可以分为局域网(LAN)、广域网(WAN)、互联网等。网络提供了远程通信、资源共享、数据传输等功能。

2.2 网络协议、IP地址、端口号

  • 网络协议: 网络协议是规定计算机之间通信的一套规则和标准。它定义了数据格式、通信流程、错误处理等。常见的网络协议有TCP、UDP、HTTP、HTTPS、FTP、SMTP等。
  • IP地址(Internet Protocol Address): IP地址用于标识计算机和设备在网络中的唯一位置。IPv4使用32位二进制数表示(例如:192.168.0.1),而IPv6使用128位十六进制数。
  • 端口号(Port Number): 端口号用于标识计算机上不同应用程序的通信通道。它是一个16位的整数,范围从0到65535。TCP和UDP使用端口号来将数据传递给正确的应用程序。

2.3  常见网络协议

  • TCP(Transmission Control Protocol): TCP是一种面向连接的协议,提供可靠的数据传输和错误检测。它将数据切割成小块(数据段)进行传输,并确保数据按序到达,适用于重要数据的传输,如文件传输、电子邮件等。

  • UDP(User Datagram Protocol): UDP是一种无连接的协议,不提供可靠性和错误检测。它将数据切割成数据报进行传输,适用于实时通信,如音频、视频传输和在线游戏。

  • HTTP(Hypertext Transfer Protocol): HTTP用于在Web上传输超文本文档,如网页。它是一种无状态的协议,客户端发送请求,服务器返回响应。HTTP常用于浏览器和Web服务器之间的通信。

  • HTTPS(Hypertext Transfer Protocol Secure): HTTPS是加密的HTTP协议,通过SSL/TLS协议对通信进行加密,保护数据的隐私和完整性。它用于安全的Web通信,如在线支付、敏感数据传输等。

3. 套接字编程

        套接字编程是网络编程中的核心,用于实现计算机之间的数据传输和通信。下面详细解释套接字的基本概念、操作以及通信模型和方法。

3.1 套接字的基本概念

        套接字(Socket)是一种抽象的通信端点,通过套接字,不同计算机之间可以进行数据交换。套接字提供了网络通信的基本接口,其中包含了目标IP地址、协议和端口号等信息。套接字通常分为两种类型:流套接字(TCP)和数据报套接字(UDP)。

3.2 套接字的基本操作

包括创建、绑定、监听和接受连接。

创建套接字: 使用socket库创建一个套接字。通过指定地址族(IPv4或IPv6)和套接字类型(TCP或UDP),来创建相应类型的套接字。

import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 创建TCP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)   # 创建UDP套接字

绑定地址: 服务器套接字需要绑定一个IP地址和端口号,以便客户端可以连接。客户端套接字通常不需要绑定。

server_address = ('127.0.0.1', 12345)
server_socket.bind(server_address)

 监听连接: 对于服务器套接字,需要调用listen()方法来准备接受连接请求。

server_socket.listen(5)  # 允许同时等待5个连接请求

接受连接: 服务器套接字使用accept()方法来接受客户端的连接请求,并返回新的套接字用于与客户端通信。

client_socket, client_address = server_socket.accept()

3.3 套接字通信模型和方法:send、recv

        套接字通信模型是基于发送和接收数据的。在TCP通信中,通常使用send()方法发送数据,然后使用recv()方法接收数据。在UDP通信中,使用sendto()方法发送数据,使用recvfrom()方法接收数据。

3.3.1 TCP通信模型

服务器端:

client_socket, client_address = server_socket.accept()
data = client_socket.recv(1024)  # 接收数据
client_socket.send(b"Hello, client!")  # 发送数据

客户端:

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('127.0.0.1', 12345))
client_socket.send(b"Hello, server!")  # 发送数据
data = client_socket.recv(1024)  # 接收数据

3.3.2 UDP通信模型

服务器端:

data, client_address = server_socket.recvfrom(1024)  # 接收数据
server_socket.sendto(b"Hello, client!", client_address)  # 发送数据

 客户端:

client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client_socket.sendto(b"Hello, server!", ('127.0.0.1', 12345))  # 发送数据
data, server_address = client_socket.recvfrom(1024)  # 接收数据

 通过理解套接字的基本概念、操作和通信模型,您可以开始构建简单的网络通信应用,如基于TCP或UDP的客户端和服务器。随着学习的深入,您可以扩展到更复杂的网络应用,如实时通信、网络安全等领域。

4. 客户端-服务器模型

        客户端-服务器模型是网络编程中常见的通信模式,其中客户端发起请求,服务器接收请求并提供服务。客户端向服务器发送请求,并等待服务器响应。以下是关于客户端和服务器的角色、交互方式以及创建简单通信示例的说明:

4.1 客户端的角色

        客户端是请求服务的一方。它向服务器发送请求,并等待服务器响应。客户端通常是终端用户使用的应用程序,如Web浏览器、移动应用、聊天客户端等。

4.2  服务器的角色

         服务器是提供服务的一方。它接收客户端的请求,处理请求,并返回响应。服务器通常运行在高性能的计算机上,以提供各种服务,如网页、数据存储、实时通信等。

4.3 客户端-服务器的交互

        典型的客户端-服务器交互包括以下步骤:

  • 客户端发起连接请求。
  • 服务器接受连接请求,并分配一个处理请求的线程或进程。
  • 客户端发送请求数据给服务器。
  • 服务器处理请求,并返回响应数据给客户端。
  • 客户端接收服务器的响应,并处理响应数据。

4.4 创建简单的客户端和服务器通信示例:

        下面是一个使用Python的Socket库创建简单的TCP客户端和服务器通信示例。这个示例中,客户端发送一个消息给服务器,服务器接收消息并返回一个确认响应。

服务器端:

import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('127.0.0.1', 12345))
server_socket.listen(5)

print("Server listening...")

while True:
    client_socket, client_address = server_socket.accept()
    print(f"Connected to {client_address}")

    data = client_socket.recv(1024)
    print("Received:", data.decode())

    response = "Message received!"
    client_socket.send(response.encode())

    client_socket.close()

客户端:

import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('127.0.0.1', 12345))

message = "Hello, server!"
client_socket.send(message.encode())

response = client_socket.recv(1024)
print("Server response:", response.decode())

client_socket.close()

 在这个示例中,服务器监听连接请求,接受客户端连接,并接收来自客户端的消息。服务器处理消息后,向客户端发送确认响应。客户端连接到服务器,发送消息并接收服务器的响应。这展示了一个简单的客户端-服务器通信过程。

5. WebSocket编程

        WebSocket是一种基于TCP的协议,旨在实现全双工的双向通信,允许服务器主动向客户端推送数据,而不需要客户端先发起请求。WebSocket在实时应用程序、聊天应用、实时通知等场景中非常有用。

5.1 WebSocket协议和特点

  • WebSocket使用单个长连接,避免了HTTP中频繁的连接和断开。
  • 客户端和服务器可以随时发送数据,实现实时通信。
  • 协议本身支持双向通信,无需额外的轮询。
  • 适用于浏览器和服务器之间的实时交互。

5.2 使用第三方库实现WebSocket通信

  websockets是一个流行的Python库,用于实现WebSocket通信。以下是使用websockets库创建WebSocket服务器和客户端的示例:

WebSocket服务器:

import asyncio
import websockets

async def echo(websocket, path):
    async for message in websocket:
        await websocket.send(message)

start_server = websockets.serve(echo, "127.0.0.1", 8765)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

WebSocket客户端:

import asyncio
import websockets

async def hello():
    uri = "ws://localhost:8765"
    async with websockets.connect(uri) as websocket:
        await websocket.send("Hello, WebSocket!")
        response = await websocket.recv()
        print(response)

asyncio.get_event_loop().run_until_complete(hello())

        在这个示例中,WebSocket服务器监听在ws://localhost:8765,当有客户端连接并发送消息时,服务器会将相同的消息回传给客户端。客户端连接到服务器后,发送消息并等待服务器的响应。

        通过使用websockets库,您可以方便地实现WebSocket通信,用于构建实时的、双向的网络应用程序。这使得实时聊天、实时更新、实时监控等应用场景变得更加容易。

6. 异步编程和多线程

6.1 异步编程的概念和优势

        异步编程是一种编程模式,旨在处理I/O密集型任务,使程序能够在等待I/O操作完成时继续执行其他任务,而不是阻塞整个进程。异步编程可以提高程序的并发性和响应性,因为它允许程序在等待I/O的同时执行其他任务。

主要的异步编程优势包括:

  • 非阻塞: 异步编程允许程序在等待I/O时继续执行其他任务,不会阻塞整个进程。
  • 更高的并发性: 多个任务可以同时执行,提高了程序的并发性能。
  • 更好的响应性: 程序可以在繁忙的情况下仍然保持响应,因为它可以在等待I/O时执行其他任务。

6.2 使用asyncio库实现异步网络编程

        asyncio是Python的异步I/O框架,用于编写异步代码。以下是使用asyncio库实现异步网络编程的示例:

import asyncio

async def main():
    await asyncio.gather(fetch_url("https://example.com"), fetch_url("https://google.com"))

async def fetch_url(url):
    print(f"Fetching {url}")
    await asyncio.sleep(2)
    print(f"Fetched {url}")

asyncio.run(main())

        在这个示例中,两个fetch_url协程同时发起对不同网址的异步请求。通过await asyncio.gather(),它们可以并发执行,利用了异步的优势。

6.3 使用threading库实现多线程网络编程

         threading是Python的线程管理库,可以用于创建和管理多个线程。以下是使用threading库实现多线程网络编程的示例:

import threading
import requests

def fetch_url(url):
    print(f"Fetching {url}")
    response = requests.get(url)
    print(f"Fetched {url}")

thread1 = threading.Thread(target=fetch_url, args=("https://example.com",))
thread2 = threading.Thread(target=fetch_url, args=("https://google.com",))

thread1.start()
thread2.start()

thread1.join()
thread2.join()

print("Threads completed")

     在这个示例中,两个线程同时发起对不同网址的请求。每个线程使用requests库来发送HTTP请求。

        请注意,这些示例中的异步和多线程代码主要关注于并发执行,以展示异步编程和多线程的基本概念。在实际应用中,您可能需要处理更多的错误处理、同步、资源共享等问题。

7. 数据安全和加密

        网络编程的安全性和防御是确保网络通信和应用程序免受恶意攻击、数据泄漏和其他安全威胁的关键方面。以下是网络编程安全与防御的详解和示例:

7.1 数据加密与隐私保护

         使用加密算法保护数据在传输过程中的隐私。SSL/TLS协议可以为网络通信提供加密层,确保数据传输过程中不易被窃取或篡改。

示例:使用Python的ssl库为网络连接添加SSL加密

import ssl
import socket

context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
with socket.create_connection(('example.com', 443)) as client_socket:
    with context.wrap_socket(client_socket, server_hostname='example.com') as secure_socket:
        secure_socket.send(b'Hello, server!')
        response = secure_socket.recv(1024)

7.2 输入验证和过滤

         对于从客户端接收的输入,始终进行有效性验证和过滤,以防止恶意输入或攻击。

示例:使用Django Web框架中的输入验证。

from django import forms

class LoginForm(forms.Form):
    username = forms.CharField()
    password = forms.CharField(widget=forms.PasswordInput)

7.3 防范跨站脚本攻击(XSS)

         避免在页面中直接插入未经验证的用户输入,以防止XSS攻击。使用输入过滤和编码来确保输出的安全性。

示例:使用Flask框架中的escape函数防止XSS攻击。

from flask import Flask, escape

app = Flask(__name__)

@app.route('/hello')
def hello():
    name = request.args.get('name', '')
    safe_name = escape(name)
    return f'Hello, {safe_name}!'

7.4 防范SQL注入

        使用参数化查询或ORM(对象关系映射)库来防止SQL注入攻击。不要直接将用户输入拼接到SQL查询中。

示例:使用SQLAlchemy参数化查询。

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine('sqlite:///mydatabase.db')
Session = sessionmaker(bind=engine)
session = Session()

username = "admin' OR '1'='1"
user = session.query(User).filter_by(username=username).first()

   7.5 安全更新和漏洞修复

    定期更新使用的库和框架,以获取最新的安全修复。监控漏洞通告,及时应对已知的安全漏洞。

示例:使用命令更新Python库。

pip install --upgrade package-name

8. 身份验证和授权

8.1 用户身份验证的方法和技术

         用户身份验证是确定用户是谁的过程,以确保用户拥有访问所请求资源的权限。常见的身份验证方法包括:

  1. 用户名和密码: 用户提供用户名和密码进行验证。需要保护密码的安全性,通常使用哈希和加盐技术。
  2. 多因素身份验证(MFA): 用户提供多个验证因素,如密码、手机验证码、指纹等,以增加安全性。
  3. 单点登录(SSO): 用户一次登录后可以访问多个关联应用,避免多次输入凭据。
  4. 社交媒体登录: 用户可以使用其社交媒体账号登录,如Google、Facebook等。
  5. 证书: 用户拥有数字证书,用于身份验证和加密通信。

8.2 实现用户登录和访问控制

          确保只有授权用户才能访问敏感数据或功能。使用身份验证(验证用户身份)和授权(分配访问权限)来限制访问。

  1. 用户登录:用户提供身份信息(用户名/密码等),服务器验证身份信息,并提供令牌作为后续访问的凭证。
  2. 访问控制:使用会话、令牌等机制,确保用户只能访问其被授权的资源,对未授权的资源进行拒绝访问。

示例:使用Flask-Login库实现用户身份验证。

from flask import Flask, render_template
from flask_login import LoginManager, login_required

app = Flask(__name__)
login_manager = LoginManager(app)

@app.route('/profile')
@login_required
def profile():
    return render_template('profile.html')

8.3 使用JWT进行身份验证

         JSON Web Token(JWT)是一种开放标准,用于在两个实体之间安全地传输信息。它由三部分组成:头部、载荷和签名。JWT常用于身份验证和授权。

  • 头部(Header): 指定令牌的类型和签名算法。
  • 载荷(Payload): 包含用户的相关信息,如用户ID、角色等。
  • 签名(Signature): 通过将头部和载荷使用密钥签名,确保令牌的完整性。

示例:使用Python中的PyJWT库创建和验证JWT令牌:

import jwt
import datetime

# 创建JWT令牌
payload = {"user_id": 123, "exp": datetime.datetime.utcnow() + datetime.timedelta(days=1)}
secret_key = "secret_key"
token = jwt.encode(payload, secret_key, algorithm="HS256")

print("Token:", token)

# 验证JWT令牌
try:
    decoded_payload = jwt.decode(token, secret_key, algorithms=["HS256"])
    print("Decoded Payload:", decoded_payload)
except jwt.ExpiredSignatureError:
    print("Token expired")
except jwt.InvalidTokenError:
    print("Invalid token")

通过JWT,您可以实现安全的用户身份验证和访问控制,避免在服务器上存储会话状态,从而降低服务器的负担。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux-samba-window登不上

登不上查了很久发现是防火墙导致的 sudo firewall-cmd --list-all //查看所有的防火墙信息sudo firewall-cmd --permanent --zonepublic --add-servicesamba //service里添加sambafirewall-cmd --reload //重启 便可以登录了,小问题

VirtualBox7+Ubuntu22集群规划

1. 目的: 新入手了一台小主机(8核 / Intel(R) Xeon(R) W-10885M CPU 2.40GHz 2.40 GHz, 16vCpu / 64G RAM / 系统类型 64 位操作系统, 基于 x64 的处理器),原装了一套Win11专业版,打算用VirtualBox 虚拟一个集群。 2. …

电脑可以上网,微信都可以用,但浏览器打不开网页

可以试试设置DNS(其他windows版本步骤): 1.打开控制面板 2.网络和Internet 3.查看网络计算机和设备 4.按照下图步骤: 5.按下图进行

深度学习论文分享(九)Unifying Motion Deblurring and Frame Interpolation with Events

深度学习论文分享(九)Unifying Motion Deblurring and Frame Interpolation with Events 前言Abstract1. Introduction2. Related Work2.1. Frame Interpolation2.2. Motion Deblurring2.3. Joint Deblurring and Interpolation 3. Problem Statement4. …

BL122:钡铼技术驱动,实现无缝Modbus到Profinet转换

钡铼技术BL122协议转换网关是一款专业的设备,用于将Modbus协议转换为Profinet协议。BL122采用了先进的嵌入式ARM MCU和基于Linux OS系统的开发,具备出色的性能和高度的稳定性。 BL122支持多种下行采集方式,包括Modbus RTU、Modbus TCP和Modbu…

Playwright for Python:安装及初步使用

文章目录 一、Playwright介绍1.1 简单介绍1.2 支持的平台1.3 支持语言1.4 官方文档(python) 二、开始2.1 安装要求2.2 安装2.3 脚本录制2.4 代码示例 一、Playwright介绍 1.1 简单介绍 Playwright是微软推出来的一款自动化测试工具,是专门为…

机器视觉工程师,没有错误

记住,在生活中,自己要会享受。在工作,做到一丝不苟。在技术上,追求精益。 人生不是那么一帆风顺,更不是坎坎坷坷,希望你们是曲折上升的,虽不能大富大贵,只要自己努力完全可以小康。…

华为OD机试 - 符合要求的元组的个数 - 回溯(Java 2023 B卷 100分)

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 一、题目描述 给定一个整数数组nums、一个数字k,一个整数目标值target,请问nums中…

pdf加密如何解除?这样解除加密很简单

pdf加密如何解除?有时,我们可能会收到一些加密的PDF文件,它们不允许我们对其进行编辑或打印。这时,我们需要使用PDF解密工具,以便能够轻松地解除PDF加密并对其进行编辑。那么接下来就给大家介绍一下pdf加密解除的方法。…

Vue基础2:传值方法

Description 传值就是为了联动&#xff0c;能够及时准确传值获取值才是王道。 Valuation Methods props和$emit props是父传子&#xff0c;$emit是子传父。 props的使用 父组件传出值 <tableList ref"table" :options"options" :header-data"C…

GE MRP680489 IS200VTCCH1CBB印刷电路板

信号处理&#xff1a; 这个印刷电路板通常用于信号处理和数据传输&#xff0c;可以与其他设备或模块进行通信&#xff0c;如传感器、执行器或控制器。 通信接口&#xff1a; IS200VTCCH1CBB 可能具有多种通信接口&#xff0c;用于与其他设备和系统进行数据交换&#xff0c;包括…

通过「内网穿透」技术,实现出差期间远程访问企业局域网中的象过河ERP系统

文章目录 概述1.查看象过河服务端端口2.内网穿透3. 异地公网连接4. 固定公网地址4.1 保留一个固定TCP地址4.2 配置固定TCP地址 5. 使用固定地址连接 概述 ERP系统对于企业来说重要性不言而喻&#xff0c;不管是财务、生产、销售还是采购&#xff0c;都需要用到ERP系统来协助。…

8月31日-9月 第六章 案例:MySQL主从复制与读写分离(面试重点,必记)

本章结构 案例概述 案例前置知识点 详细图示 1、什么是读写分离&#xff1f; 读写分离&#xff0c;基本的原理是让主数据库处理事务性增、改、删操作&#xff08;INSERT、UPDATE、DELETE&#xff09;&#xff0c;而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导…

基于Python的IOS自动化测试环境搭建

文章目录 一、测试架构介绍1.1 WebDriverAgent原理分析1.2 tidevice原理分析二、环境安装2.1 iOS 设备安装 WebDriverAgent2.2 安装iTunes2.3 安装tidevice2.4 安装facebook-wda自动化三、操作流程一、测试架构介绍 以下为测试架构原理图 手机端的WDA Runner(WebDriverAgent…

如何通过网络远程访问电脑?

怎么远程访问公司电脑&#xff1f; “你好&#xff0c;我想通过网络从外面远程访问公司的电脑&#xff0c;这可能吗&#xff1f;您知道如何通过网络远程访问另一台电脑吗&#xff1f;” 借助远程访问工具&#xff0c;我们是可以通过网络远程访问公司电脑的。通过…

静电离子风棒的联网智能实时监控的操作步骤

静电离子风棒的联网智能实时监控可以通过以下步骤进行&#xff1a; 1. 获取数据&#xff1a;将静电离子风棒上的传感器与网络连接&#xff0c;以获取实时数据。传感器可能包括温度传感器、湿度传感器、电流传感器等&#xff0c;用于监测离子风棒的工作状态和环境信息。 2. 数…

Elasticsearch:自动使用服务器时间设置日期字段并更新时区

在大多数情况下&#xff0c;你的数据包含一个以 create_date 命名的字段。 即使没有日期字段&#xff0c;处理各种格式和时区的日期对数据仓库来说也是一个重大挑战。 与此类似&#xff0c;如果要检测变化的数据&#xff0c;则必须准确设置日期字段。 在 Elasticsearch 中还有…

蓝牙运动耳机哪个牌子好、好用的运动蓝牙耳机推荐

作为一个热爱运动的人&#xff0c;我对耳机非常关注。我相信许多喜欢运动的人在锻炼时都会佩戴耳机&#xff0c;这样可以为运动增添一份乐趣&#xff0c;享受自己喜爱的音乐或聆听有趣的小说&#xff0c;激发内心的动力。但很多人都不知道要怎么选一款优质的运动耳机&#xff0…

C语言:字符函数和字符串函数(一篇拿捏字符串函数!)

目录 求字符串长度&#xff1a; 1. strlen(字符串长度) 长度不受限制函数&#xff1a; 2. strcpy(字符串拷贝) 3. strcat(字符串追加) 4. strcmp(字符串比较) 长度受限制函数&#xff1a; 5. strncpy(字符串拷贝) 6. strncat(字符串追加) 7. strncmp(字符串比较) 字…

关于大学考研与不考研自己一点看法

据网上报道&#xff0c;2023年研究生报考人数为474万&#xff0c;相较22年报名人数457万人,同比增长 17 万 2023年的考研录取率为20&#xff05;,如今,在北京的硕士博士生超过本科生人数 学历的贬值&#xff0c;通胀,速度远远超乎了想象 近几年的考研热,考公,考编热是年年基本上…