社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python 3 网络编程深度解析与实战指南​

小小的python学习社 • 2 周前 • 188 次点击  

资料已经打包好了,需要的关注公众号发送“111”领取

在数字化时代,网络编程已成为软件开发领域不可或缺的一部分。Python 3 凭借其简洁的语法、丰富的标准库和强大的第三方库,成为网络编程的热门选择之一。无论是开发简单的客户端 - 服务器应用,还是构建复杂的分布式系统,Python 3 都能提供高效且可靠的解决方案。本文将深入探讨 Python 3 网络编程的核心概念、关键技术,并通过代码示例展示其实际应用。

一、网络编程基础概念

在深入学习 Python 3 网络编程之前,先了解一些基础的网络概念。

1.1 网络协议

网络协议是网络中设备之间进行通信的规则和约定,常见的协议包括 TCP(传输控制协议)、UDP(用户数据报协议)等。

  • TCP 协议:面向连接、可靠的传输协议,它通过三次握手建立连接,保证数据的有序传输和完整性,适用于对数据准确性要求高的场景,如文件传输、网页浏览等。
  • UDP 协议:无连接、不可靠的传输协议,数据传输速度快,但不保证数据一定能到达目的地,也不保证数据的顺序,常用于实时性要求高但允许少量数据丢失的场景,如视频流、音频流传输等。

1.2 端口

端口是计算机与外界通信交流的出口,用于区分不同的网络服务和应用程序。端口号的范围是 0 - 65535,其中 0 - 1023 为系统保留端口,用于常见的网络服务,如 HTTP 服务默认使用 80 端口,HTTPS 服务默认使用 443 端口。

1.3 套接字(Socket)

套接字是网络编程的基石,它是一种抽象的通信端点,为应用程序提供了发送和接收数据的接口。通过套接字,应用程序可以与网络中的其他应用程序进行通信,它可以基于不同的协议(如 TCP、UDP)创建,也可以在不同的地址族(如 IPv4、IPv6)上工作。

二、Python 3 中的 Socket 模块

Python 3 的socket模块提供了对套接字编程的支持,使用该模块可以创建基于 TCP 和 UDP 协议的网络应用。

2.1 创建 TCP 套接字

下面是一个简单的 TCP 服务器和客户端示例:

import socket
# 创建TCP服务器
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('localhost'8888)
server_socket.bind(server_address)
server_socket.listen(5)

print('服务器已启动,等待客户端连接...')
while True:
client_socket, client_address = server_socket.accept()
print(f'客户端 {client_address} 已连接')
data = client_socket.recv(1024)
if data:
message = data.decode('utf - 8')
print(f'收到客户端消息: {message}')
response = f'你发送的消息是: {message}'
client_socket.send(response.encode('utf - 8'))
client_socket.close()



    
import socket
# 创建TCP客户端
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('localhost'8888)
client_socket.connect(server_address)


message = 'Hello, Server!'
client_socket.send(message.encode('utf - 8'))
data = client_socket.recv(1024)
print(f'收到服务器响应: {data.decode("utf - 8")}')
client_socket.close()

在上述代码中,服务器端首先创建了一个基于 IPv4 地址族和 TCP 协议的套接字,然后绑定到指定的地址和端口,并开始监听连接。当有客户端连接时,接受连接并接收客户端发送的数据,处理后返回响应。客户端则创建套接字并连接到服务器,发送消息并接收服务器的响应。

2.2 创建 UDP 套接字

import socket
# 创建UDP服务器
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ('localhost'8888)
server_socket.bind(server_address)
print('UDP服务器已启动,等待接收数据...')
while True:
data, client_address = server_socket.recvfrom(1024)
if data:
message = data.decode('utf - 8')
print(f'收到客户端 {client_address} 消息: {message}')
response = f'你发送的消息是: {message}'
server_socket.sendto(response.encode('utf - 8'), client_address)
import socket
# 创建UDP客户端
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ('localhost'8888)
message = 'Hello, UDP Server!'
client_socket.sendto(message.encode('utf - 8'), server_address)
data, server_address = client_socket.recvfrom(1024)
print(f'收到服务器响应: {data.decode("utf - 8")}')
client_socket.close()

对于 UDP 编程,服务器和客户端通过sendto和recvfrom方法发送和接收数据,不需要像 TCP 那样建立连接。

三、高级网络编程技术

3.1 多线程与多进程网络编程

在实际应用中,单个线程或进程可能无法满足处理大量并发连接的需求。这时可以使用多线程或多进程技术。

import socket
import threading
def handle_client(client_socket, client_address):
while True:
data = client_socket.recv(1024)
if data:
message = data.decode('utf - 8')
print(f'收到客户端 {client_address} 消息: {message}')
response = f'你发送的消息是: {message}'
client_socket.send(response.encode('utf - 8'))
else:
client_socket.close()
break

# 创建TCP服务器
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('localhost'8888)
server_socket.bind(server_address)
server_socket.listen(5)

print('多线程服务器已启动,等待客户端连接...')
while True:
client_socket, client_address = server_socket.accept()
print(f'客户端 {client_address} 已连接')
client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address))
client_thread.start()
上述代码使用多线程处理客户端连接,每个客户端连接都由一个独立的线程进行处理,这样可以提高服务器的并发处理能力。多进程编程与之类似,只是使用multiprocessing模块创建和管理进程。

3.2 异步网络编程

Python 3.4 引入了asyncio库,用于实现异步 I/O 操作,极大地提高了网络应用的性能和并发处理能力。

import asyncio


async def handle_client(reader, writer):
data = await reader.read(1024)
message = data.decode('utf - 8')
addr = writer.get_extra_info('peername')
print(f"收到来自 {addr} 的消息: {message}")

response = f'你发送的消息是: {message}'
writer.write(response.encode('utf - 8'))
await writer.drain()

print("关闭连接")
writer.close()

async def main():
server = await asyncio.start_server(handle_client, 'localhost'8888)

addr = server.sockets[0].getsockname()
print(f'Serving on {addr}')

async with server:
await server.serve_forever()

asyncio.run(main())

在asyncio中,通过async和await关键字定义异步函数,start_server函数用于启动服务器,handle_client函数处理每个客户端连接,实现异步接收和发送数据。

四、网络编程中的安全问题

网络编程中,安全至关重要。常见的安全问题包括数据泄露、恶意攻击等。为了保障网络应用的安全,可以采取以下措施:

  1. 数据加密:使用 SSL/TLS 协议对传输的数据进行加密,Python 中的ssl模块提供了相关支持。
  1. 身份验证:对客户端和服务器进行身份验证,确保通信双方的合法性。
  1. 输入验证:对用户输入的数据进行严格验证,防止 SQL 注入、XSS 攻击等。

五、总结

Python 3 网络编程提供了丰富且强大的工具和技术,从基础的 Socket 编程到高级的多线程、多进程和异步编程,再到网络安全防护,能够满足各种网络应用的开发需求。通过本文的介绍和示例,希望读者能够对 Python 3 网络编程有更深入的理解,并在实际项目中灵活运用这些技术。随着网络技术的不断发展,Python 3 网络编程也将持续演进,为开发者带来更多高效便捷的解决方案。

 结语 

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

整理出了一套系统的学习路线,这套资料涵盖了诸多学习内容:开发工具,基础视频教程,项目实战源码,51本电子书籍,100道练习题等。相信可以帮助大家在最短的时间内,能达到事半功倍效果,用来复习也是非常不错的。

👉Python学习路线汇总👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

👉Python学习视频合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

👉实战案例👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

资料获取方式:↓↓↓↓
1.关注下方公众号↓↓↓↓,在后台发送:111 即可免费领取

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/185709
 
188 次点击