Aprende Python desde cero conmigo (2) Programación de redes

prefacio

Ayer expliqué por primera vez cómo comenzar con Python desde cero y el contenido obligatorio de la gramática de programación, como comenzar con Python3, listas y tuplas, cadenas, diccionarios, condiciones, bucles y otras declaraciones, funciones, orientadas a objetos, excepciones y procesamiento de archivos
1. Aprenda Python desde cero conmigo (1) Gramática de programación obligatoria

Hoy hablaré de la segunda parte: programación concurrente de Python: programación de red

Esta serie de artículos se basa en las siguientes rutas de aprendizaje: debido al gran contenido: aprender Python desde cero hasta la hoja de ruta avanzada avanzada

Preste atención a la cuenta oficial: campo de entrenamiento de tecnología Python , aprenda avanzado paso a paso

Recursos de Python adecuados para el aprendizaje de base cero y personas avanzadas:

① PDF con notas del tutorial práctico del proyecto completo de Python certificado por Tencent
② PDF con temas de entrevistas sobre Python de más de una docena de fabricantes importantes
③ Conjunto completo de tutoriales en video de Python (JS avanzado avanzado y sin fundamentos)
④ Cientos de proyectos reales de combate + código fuente + notas
⑤ Programación gramática - aprendizaje automático -Desarrollo completo-análisis de datos-rastreador-APP ingeniería inversa y otro conjunto completo de proyectos + documentos
⑥ Intercambio y estudio
⑦ Quiero recibir pedidos a tiempo parcial

Capítulo 1: Programación de red

1. Programación de red

La programación de redes se refiere a técnicas de programación que utilizan redes informáticas para la comunicación. En Python, socketla programación de redes se puede implementar mediante módulos.

socketEs una biblioteca de programación de red que encapsula TCP/IPel protocolo y proporciona una interfaz de programación de red general que se puede utilizar para crear programas de cliente y servidor. En Python, usa socketmódulos para crear socketobjetos y luego usa ese objeto para la comunicación de red.

El siguiente es un ejemplo simple de programación de red, en el que se crean un servidor y un cliente, el cliente envía un mensaje al servidor y el servidor imprime el mensaje después de recibirlo:

Código del lado del servidor:

import socket

# 创建socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定IP地址和端口号
server_socket.bind(('127.0.0.1', 8888))

# 监听端口
server_socket.listen(5)

print('服务器已启动,等待客户端连接...')

# 等待客户端连接
client_socket, client_address = server_socket.accept()

print('客户端已连接,地址为:', client_address)

# 接收客户端消息
data = client_socket.recv(1024)

print('接收到客户端消息:', data.decode())

# 关闭socket连接
client_socket.close()
server_socket.close()

Codigo del cliente:

import socket

# 创建socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接服务器
client_socket.connect(('127.0.0.1', 8888))

# 发送消息
client_socket.send('Hello, server!'.encode())

# 关闭socket连接
client_socket.close()

PyCharmPara compilar y ejecutar Matlabarchivos en , Matlabprimero debe instalar y configurar las variables de entorno. Luego, PyCharmabra Matlabel archivo en , haga clic en el botón Ejecutar para compilar y ejecutar Matlabel archivo. Si es necesario pasar parámetros, se pueden configurar en la configuración de ejecución.

2. Introducción a TCP/IP

TCP/IPEs un protocolo de red, que es el protocolo básico de Internet. TCP/IPLa familia de protocolos incluye muchos protocolos, el más importante de los cuales es TCPel IPprotocolo y.

TCPEl protocolo es un protocolo orientado a conexión que proporciona servicios de transmisión de datos confiables. TCPEl protocolo establece una conexión mediante un protocolo de enlace de tres vías y luego garantiza una transmisión de datos confiable mediante mecanismos de confirmación y segmentación de datos.

IPEl protocolo es un protocolo sin conexión que proporciona servicios de transmisión de paquetes de datos. El protocolo IP determina la ruta de transmisión del paquete de datos a través del algoritmo de enrutamiento y luego transmite el paquete de datos al destino.

En la programación de redes, normalmente utilizamos TCPprotocolos para la transmisión de datos. TCPEl protocolo proporciona servicios de transmisión de datos confiables y es adecuado para escenarios que necesitan garantizar la confiabilidad de la transmisión de datos, como la transmisión de archivos y la transmisión de correo. El protocolo IPes adecuado para escenarios que requieren una transmisión de datos rápida, como transmisión de video, comunicación en tiempo real, etc.

3. Módulo de Diseño de Red

1. Introducción al zócalo

SocketEs un mecanismo de comunicación que permite que diferentes procesos se comuniquen a través de una red. En Python, Socketesto se socketlogra mediante módulos. SocketNormalmente se utiliza para la comunicación entre clientes y servidores, pero también se puede utilizar para la comunicación entre procesos.

2. Uso del módulo de enchufe

Los módulos en Python socketproporcionan un conjunto de funciones y clases para creación y manipulación Socket. Las funciones y clases de uso común incluyen:

  • socket(): Crea un objeto Socket.
  • bind(): vincula el socket a una dirección y puerto específicos.
  • listen(): comience a escuchar las solicitudes de conexión.
  • accept(): Acepta una solicitud de conexión y devuelve un nuevo objeto Socket.
  • connect(): Conéctese a un enchufe remoto.
  • send():enviar datos.
  • recv():Recibir datos.

3. Servidor

En Python, puedes usar socketmódulos para crear un servidor. Por lo general, un servidor necesita vincularse a una dirección y un puerto específicos y escuchar las solicitudes de conexión. Cuando un cliente se conecta al servidor, el servidor acepta la solicitud de conexión y crea un nuevo Socketobjeto para manejar la solicitud del cliente.

Aquí hay un ejemplo simple de servidor Python:

import socket

HOST = '127.0.0.1'  # 服务器地址
PORT = 8888  # 服务器端口号

# 创建一个Socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定到地址和端口
server_socket.bind((HOST, PORT))

# 开始监听连接请求
server_socket.listen(1)

print('Server is running on {}:{}'.format(HOST, PORT))

while True:
    # 接受一个连接请求,并返回一个新的Socket对象
    client_socket, client_address = server_socket.accept()
    print('Client connected from {}:{}'.format(client_address[0], client_address[1]))

    # 处理客户端请求
    data = client_socket.recv(1024)
    print('Received data: {}'.format(data.decode()))

    # 发送响应数据
    response = 'Hello, client!'
    client_socket.send(response.encode())

    # 关闭连接
    client_socket.close()

4. Cliente

En Python, socketse puede crear un cliente usando un módulo. Los clientes normalmente necesitan conectarse a un control remoto Sockety enviar datos de solicitud. Cuando el servidor responde a la solicitud, el cliente recibe los datos de respuesta.

Aquí hay un ejemplo simple de cliente Python:

import socket

HOST = '127.0.0.1'  # 服务器地址
PORT = 8888  # 服务器端口号

# 创建一个Socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接到远程Socket
client_socket.connect((HOST, PORT))

# 发送请求数据
request = 'Hello, server!'
client_socket.send(request.encode())

# 接收响应数据
response = client_socket.recv(1024)
print('Received data: {}'.format(response.decode()))

# 关闭连接
client_socket.close()

5. Descargador de archivos

Un descargador de archivos es una aplicación web común que descarga archivos desde un servidor remoto y los guarda localmente. En Python, los descargadores de archivos se pueden implementar mediante socketmódulos y módulos.urllib

Aquí hay un ejemplo simple de descarga de archivos Python:

import socket
import urllib.request

HOST = '127.0.0.1'  # 服务器地址
PORT = 8888  # 服务器端口号
FILE_URL = 'http://example.com/file.txt'  # 文件下载地址
FILE_NAME = 'file.txt'  # 文件保存路径

# 创建一个Socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接到远程Socket
client_socket.connect((HOST, PORT))

# 发送请求数据
request = 'GET {}\r\n'.format(FILE_URL)
client_socket.send(request.encode())

# 接收响应数据
response = client_socket.recv(1024)
print('Received data: {}'.format(response.decode()))

# 下载文件并保存到本地
with open(FILE_NAME, 'wb') as f:
    while True:
        data = client_socket.recv(1024)
        if not data:
            break
        f.write(data)

# 关闭连接
client_socket.close()

4. Contenido complementario

1. Protocolo UDP en programación de red.

UDP (Protocolo de datagramas de usuario) es un protocolo de transmisión sin conexión y poco confiable. No garantiza la confiabilidad y secuencia de los paquetes de datos, pero la velocidad de transmisión es rápida y es adecuado para algunos escenarios de aplicaciones que no requieren una alta confiabilidad de los datos. como video, audio y otras transmisiones en tiempo real.

En Python, la programación de protocolos en red socketse puede implementar mediante módulos UDP. A continuación se muestra un ejemplo de un UDPservidor y un cliente simples:

UDPservidor:

import socket

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

# 绑定IP地址和端口号
server_socket.bind(('127.0.0.1', 8888))

while True:
    # 接收数据
    data, addr = server_socket.recvfrom(1024)
    print('Received from %s:%s.' % addr)
    print('Data: %s' % data.decode())

    # 发送数据
    server_socket.sendto('Hello, client!'.encode(), addr)

UDPcliente:

import socket

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

# 发送数据
client_socket.sendto('Hello, server!'.encode(), ('127.0.0.1', 8888))

# 接收数据
data, addr = client_socket.recvfrom(1024)
print('Received from %s:%s.' % addr)
print('Data: %s' % data.decode())

# 关闭套接字
client_socket.close()

En UDPel protocolo, la dirección de destino y el número de puerto deben especificarse al enviar datos, y la dirección y el número de puerto del remitente se devolverán al recibir datos. Dado que UDPel protocolo no garantiza la confiabilidad y secuencia de los datos, en las aplicaciones prácticas se deben considerar problemas como la pérdida, duplicación y desorden de datos.

2. La diferencia entre el protocolo UDP y el protocolo TCP

UDPProtocolo y TCPprotocolo son dos protocolos de transmisión de red de uso común y tienen las siguientes diferencias:

  • Modo de conexión : TCPel protocolo es un protocolo orientado a la conexión, mientras que UDPel protocolo es un protocolo sin conexión. TCPLos protocolos requieren que se establezca una conexión antes de transferir datos, mientras que UDPlos protocolos no.

  • Confiabilidad : TCPEl protocolo es un protocolo confiable, que garantiza la transmisión confiable de datos, mientras que UDPel protocolo es un protocolo no confiable, que no garantiza la transmisión confiable de datos.

  • Eficiencia de transmisión : UDPEl protocolo TCPes más eficiente que la transmisión del protocolo, porque UDPel protocolo no necesita establecer una conexión y mantener el estado de la conexión, pero TCPel protocolo sí.

  • Tamaño del paquete : UDPel tamaño del paquete de transmisión del protocolo está limitado a 64 KB, mientras que TCPel protocolo no tiene límite.

  • Escenarios de aplicación : TCPel protocolo es adecuado para escenarios que requieren una alta confiabilidad de transmisión de datos, como transferencia de archivos, transmisión de correo electrónico, etc., y el protocolo UDPes adecuado para escenarios que requieren una alta transmisión de datos en tiempo real, como transmisión de video en vivo, llamadas de voz, etc

3. Implementación del código del protocolo UDP

UDPEl protocolo es un protocolo sin conexión, que no garantiza la confiabilidad y secuencia de la transmisión de datos, pero tiene la ventaja de una velocidad de transmisión rápida. UDPLa siguiente es la implementación del código de programación de red usando protocolos en Python :

Código del lado del servidor:

import socket

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

# 绑定IP地址和端口号
server_socket.bind(('127.0.0.1', 8888))

# 接收数据
while True:
    data, addr = server_socket.recvfrom(1024)
    print('Received from %s:%s.' % addr)
    print('Data: %s' % data.decode())

    # 发送数据
    server_socket.sendto('Hello, client!'.encode(), addr)

Codigo del cliente:

import socket

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

# 发送数据
client_socket.sendto('Hello, server!'.encode(), ('127.0.0.1', 8888))

# 接收数据
data, addr = client_socket.recvfrom(1024)
print('Received from %s:%s.' % addr)
print('Data: %s' % data.decode())

# 关闭套接字
client_socket.close()

En el código anterior, el servidor primero crea un UDPsocket y vincula IPla dirección y el número de puerto. Luego recvfrom()reciba los datos enviados por el cliente a través del método y sendto()envíe los datos al cliente a través del método. El cliente también crea un UDPsocket, sendto()envía datos al servidor a través del método y luego recvfrom()recibe los datos enviados por el servidor a través del método. Finalmente, el cliente cierra el socket.

Esta serie de artículos se basa en las siguientes rutas de aprendizaje: debido al gran contenido: aprender Python desde cero hasta la hoja de ruta avanzada avanzada

Preste atención a la cuenta oficial: campo de entrenamiento de tecnología Python , aprenda avanzado paso a paso

Recursos de Python adecuados para el aprendizaje de base cero y personas avanzadas:

① PDF con notas del tutorial práctico del proyecto completo de Python certificado por Tencent
② PDF con temas de entrevistas sobre Python de más de una docena de fabricantes importantes
③ Conjunto completo de tutoriales en video de Python (JS avanzado avanzado y sin fundamentos)
④ Cientos de proyectos reales de combate + código fuente + notas
⑤ Programación gramática - aprendizaje automático -Desarrollo completo-análisis de datos-rastreador-APP ingeniería inversa y otro conjunto completo de proyectos + documentos
⑥ Intercambio y estudio
⑦ Quiero recibir pedidos a tiempo parcial

El siguiente capítulo trata sobre: ​​programación concurrente de Python: subprocesos múltiples

Supongo que te gusta

Origin blog.csdn.net/ch950401/article/details/131595770
Recomendado
Clasificación