当前位置: 首页 > article >正文

Python 网络编程指南(初学者版)

Python 是一种功能强大且易于学习的编程语言,尤其适合网络编程。本文将带领初学者了解 Python 网络编程的基础知识,包括基本概念、常用模块以及简单的示例代码。

一、网络编程基础

1.1 网络协议

网络编程主要基于网络协议,其中最常用的是 TCP(传输控制协议)UDP(用户数据报协议)

  • TCP:面向连接、可靠传输,适用于需要保证数据完整性的应用,如网页浏览、电子邮件等。
  • UDP:无连接、不可靠传输,但速度快,适用于对速度要求高且可以容忍数据丢失的应用,如视频直播、在线游戏等。

1.2 客户端-服务器模型

网络通信通常采用客户端-服务器模型:

  • 服务器(Server):监听特定端口,等待客户端连接请求,处理请求并返回响应。
  • 客户端(Client):主动连接服务器,发送请求并接收响应。

二、Python 网络编程常用模块

Python 提供了多个内置模块来支持网络编程,其中最常用的是 socket 模块。

2.1 socket 模块

socket 模块提供了网络通信的基本功能,支持 TCP 和 UDP 协议。

2.1.1 基本用法
  • 创建套接字socket.socket(family, type)

    • family:地址家族,常用 socket.AF_INET(IPv4)或 socket.AF_INET6(IPv6)
    • type:套接字类型,socket.SOCK_STREAM(TCP)或 socket.SOCK_DGRAM(UDP)
  • 绑定地址bind((host, port))

    • host:主机地址(域名或 IP)
    • port:端口号(0-65535)
  • 监听连接listen([backlog])

    • backlog:最大连接数
  • 连接服务器connect((host, port))

  • 发送数据send(bytes)

  • 接收数据recv(bufsize)

  • 关闭套接字close()

2.2 其他模块

  • http.server:用于创建简单的 HTTP 服务器。
  • socketserver:简化网络服务器的编写。
  • asyncio:支持异步网络编程。

三、示例代码

3.1 TCP 服务器和客户端

3.1.1 TCP 服务器
import socket

def tcp_server():
    # 创建 TCP 套接字
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind(('localhost', 8080))  # 绑定地址和端口
    server_socket.listen(5)  # 开始监听,最大连接数为 5
    print("服务器已启动,等待连接...")

    while True:
        client_socket, addr = server_socket.accept()  # 接受客户端连接
        print(f"连接来自: {addr}")
        while True:
            data = client_socket.recv(1024)  # 接收数据
            if not data:
                break
            print(f"收到数据: {data.decode()}")
            client_socket.sendall(data)  # 回传数据
        client_socket.close()
        print("连接关闭")

if __name__ == "__main__":
    tcp_server()
3.1.2 TCP 客户端
import socket

def tcp_client():
    # 创建 TCP 套接字
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect(('localhost', 8080))  # 连接服务器

    while True:
        message = input("请输入要发送的消息(输入 'exit' 退出): ")
        if message.lower() == 'exit':
            break
        client_socket.sendall(message.encode())  # 发送数据
        data = client_socket.recv(1024)  # 接收回传数据
        print(f"服务器回传: {data.decode()}")

    client_socket.close()
    print("客户端关闭")

if __name__ == "__main__":
    tcp_client()

3.2 运行示例

  1. 启动服务器:运行 TCP 服务器代码,服务器将开始监听端口 8080。
  2. 启动客户端:运行 TCP 客户端代码,客户端将连接到服务器。
  3. 发送消息:在客户端输入消息并发送,服务器将接收消息并回传相同内容。
  4. 退出:输入 exit 退出客户端连接。

四、异步网络编程

对于需要处理大量并发连接的应用,可以使用 asyncio 模块进行异步网络编程。

4.1 异步 TCP 服务器示例

import asyncio

async def handle_client(reader, writer):
    data = await reader.read(1024)
    message = data.decode()
    print(f"收到数据: {message}")
    writer.write(data)  # 回传数据
    await writer.drain()
    writer.close()

async def tcp_server():
    server = await asyncio.start_server(handle_client, 'localhost', 8080)
    addrs = ', '.join(str(sock.getsockname()) for sock in server.sockets)
    print(f"服务器已启动,监听地址: {addrs}")
    async with server:
        await server.serve_forever()

if __name__ == "__main__":
    asyncio.run(tcp_server())

五、总结

本文介绍了 Python 网络编程的基础知识,包括网络协议、客户端-服务器模型以及常用模块和示例代码。对于初学者来说,掌握 socket 模块的基本用法是学习网络编程的第一步。随着学习的深入,可以进一步学习异步网络编程、HTTP 协议以及更高级的网络应用开发。

希望这篇指南能帮助你顺利入门 Python 网络编程!如果期望获得指导交流。

在这里插入图片描述


http://www.kler.cn/a/390971.html

相关文章:

  • FatLab:我的编程课程系列
  • 2019年下半年试题二:论软件系统架构评估及其应用
  • 【小程序】封装网络请求request模块
  • 【Linux】进程池实现指南:掌控并发编程的核心
  • XML Schema 字符串数据类型
  • 从0开始学docker (每日更新 24-11-7)
  • Unity类银河战士恶魔城学习总结(P118 Thunder Strike On Ability 制作一把带有雷电效果的项链)
  • Ubuntu20.04 安装build-essential问题
  • 丹摩征文活动 | 轻松上手图像生成:FLUX.1遇上ComfyUI,让复杂变简单!
  • 小程序与 H5 的交互
  • mac 中python 安装mysqlclient 出现 ld: library ‘ssl‘ not found错误
  • Vue全栈开发旅游网项目(10)-设计用户模型
  • C++ | Leetcode C++题解之第557题反转字符串中的单词III
  • Rust使用DX11进行截图并保存
  • 逻辑的空无
  • SQL的三值逻辑
  • 基于vue框架的的汽车租赁系统34311(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • HTML查缺补漏
  • playwright学习记录2--定位方式
  • 【Unity/GameFramework】Start Force ——配置和表加载
  • 二分答案-整型二分—愤怒的牛-P1676 [USACO05FEB] Aggressive cows G
  • 微服务架构面试内容整理-监控与追踪-Zipkin
  • AlphaFold3中文安装教程
  • Unity类银河战士恶魔城学习总结(P117 Ice And Fire Item Effec 制作一把冰火属性的剑)
  • 练习题 - Django 4.x WWW 网址使用示例和配置方法
  • Git推送报错Authentication failed