Python 网络编程入门

发布于:2025-05-27 ⋅ 阅读:(165) ⋅ 点赞:(0)

目录

一、前言

二、网络通信基础12:TCP 与 UDP 协议解析

2.1 TCP 协议:可靠的面向连接通信

2.2 UDP 协7议:无连接的快速通信

2.3 Sock12et:网络通信的基石

三、TCP 编程实15战:从单工通信到双向聊天

3.1 TCP 客户端与服务器基础示例

3.2 双向聊天1819应用:实时交互的 TCP 通信

四、UDP 编程实战:无连接的快速数据传输

4.1 UDP 客户端与服务器基础示例

五、协议对比与应24用场景选择

六、总结与拓展


一、前言

随着互联网的普及,网络通信已成为计算机应用的核心。Python 凭借简洁易用的特性,成为网络编程的热门选择。本文将深入解析 TCP 与 UDP 协议的原理,通过 Socket 编程实现网络通信,并带你完成一个简易聊天应用的开发,帮助你快速掌握 Python 网络编程的核心技能。

二、网络通信基础12:TCP 与 UDP 协议解析

2.1 TCP 协议:可靠的面向连接通信

TCP(传输控制协议)通过三次握手建立连接四次挥手断开连接,确保数据可靠、有序传输。其核心特性包括:

  • 面向连接:通信前需先建立连接(如打电话需先拨号)。
  • 可靠性:通过序3列号、确认应答、重传机制确保数据不丢失(类似快递追踪系统)。
  • 流量控制:利用4滑动窗口技术避免接收方处理过载(如水管调节水流速度)。
  • 有序性:按序号5重组数据包,保证数据顺序正确。

典型应用场景:文6件传输(FTP)、电子邮件(SMTP)、网页浏览(HTTP)等对可靠性要求高的场景。

2.2 UDP 协7议:无连接的快速通信

UDP(用户数据报协议)无需建立连接,直接发送数据,具有以下特点:

  • 无连接:省去握手过程,通信效率高(类似发短信,无需等待对方接听)。
  • 不可靠传输:不8保证数据到达或顺序,可能丢包或乱序。
  • 速度快:无额外9开销,适合实时性场景(如在线游戏、视频会议)。
  • 支持广播 / 多播10:可同时向多个接收方发送数据。

典型应用场景:实11时音视频传输(如 WebRTC)、传感器数据采集、域名解析(DNS)等。

2.3 Sock12et:网络通信的基石

Socket 是网络编程的抽象层,Python 通过socket模块实现 Socket 接口。关键概念包括:

地址族AF_INET(IPv4)、AF_INET6(IPv6)。

协议类型S{insert\_element\_11\_}OCK_STREAM(TCP)、SOCK_DGRAM(UDP)。

通过 Socket,我们可14以轻松实现客户端与服务器的通信,无论是建立连接(TCP)还是直接发送数据(UDP)。

三、TCP 编程实15战:从单工通信到双向聊天

3.1 TCP 客户端与服务器基础示例

客户端代码(单向通信)

import socket

def tcp_client():
    # 创建TCP Socket(IPv4 + TCP协议)
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 连接服务器(本地回环地址,端口12345)
    client_socket.connect(("127.0.0.1", 12345))
    # 发送数据(需编码为字节流)
    client_socket.send("Hello, Server".encode("utf-8"))
    # 接收响应(最多1024字节)
    response = client_socket.recv(1024)
    print("Received from server:", response.decode("utf-8"))
    # 关闭连接
    client_socket.close()

if __name__ == "__main__":
    tcp_client()

服务器代码(单向响应)

import socket

def tcp_server():
    # 创建TCP Socket并绑定地址
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind(("127.0.0.1", 12345))
    # 开始监听(最大连接数5)
    server_socket.listen(5)
    print("Server is listening...")
    
    while True:
        # 接受客户端连接
        client_socket, client_addr = server_socket.accept()
        print(f"Connection from {client_addr}")
        # 接收数据
        message = client_socket.recv(1024)
        # 发送响应(需编码为字节流)
        client_socket.send(b"Hello, Client")
        # 关闭客户端连接
        client_socket.close()

if __name__ == "__main__":
    tcp_server()

代码关键点

connect():客户端主动连接服务器。

bind():服务16器绑定 IP 和端口,固定通信入口。

listen()与17accept():服务器监听并接受连接请求。

数据需通过encod{insert\_element\_16\_}e()decode()完成字节流与字符串的转换。

3.2 双向聊天1819应用:实时交互的 TCP 通信

客户端(支持持续输入)

import socket

def tcp_chat_client():
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect(("127.0.0.1", 12345))
    
    while True:
        # 获取用户输入
        message = input("You: ")
        if message.lower() == "exit":
            break  # 输入exit退出
        # 发送消息
        client_socket.send(message.encode("utf-8"))
        # 接收服务器响应
        response = client_socket.recv(1024)
        print(f"Server: {response.decode('utf-8')}")
    
    client_socket.close()

if __name__ == "__main__":
    tcp_chat_client()

服务器(支持双向对话)

import socket

def tcp_chat_server():
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind(("127.0.0.1", 12345))
    server_socket.listen(5)
    print("Server is waiting for connection...")
    
    # 接受客户端连接
    client_socket, client_addr = server_socket.accept()
    print(f"Connection established with {client_addr}")
    
    while True:
        # 接收客户端消息
        message = client_socket.recv(1024)
        if not message:
            break  # 无数据则退出
        print(f"Client: {message.decode('utf-8')}")
        # 服务器输入响应
        response = input("You: ")
        client_socket.send(response.encode("utf-8"))
    
    client_socket.close()
    server_socket.close()

if __name__ == "__main__":
    tcp_chat_server()

运行效果

# 客户端
You: 你好,服务器!
Server: 你好,客户端!
You: exit

# 服务器
Connection established with ('127.0.0.1', 50001)
Client: 你好,服务器!
You: 你好,客户端!

四、UDP 编程实战:无连接的快速数据传输

4.1 UDP 客户端与服务器基础示例

客户端代码(无连接发送)

import socket

def udp_client():
    # 创建UDP Socket
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    # 直接发送数据(需指定目标地址)
    client_socket.sendto("Hello, UDP Server".encode("utf-8"), ("127.0.0.1", 12345))
    # 接收响应(返回数据和服务器地址)
    response, server_addr = client_socket.recvfrom(1024)
    print(f"Received from {server_addr}: {response.decode('utf-8')}")
    client_socket.close()

if __name__ == "__main__":
    udp_client()

服务器代码(无连接接收)

import socket

def udp_server():
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    server_socket.bind(("127.0.0.1", 12345))
    print("Server is listening...")
    
    while True:
        # 接收数据(返回数据和客户端地址)
        message, client_addr = server_socket.recvfrom(1024)
        print(f"Received from {client_addr}: {message.decode('utf-8')}")
        # 向客户端发送响应
        server_socket.sendto(b"Hello, UDP Client", client_addr)

if __name__ == "__main__":
    udp_server()

代码关键点

sendto():UDP 无需连接,直接指定目标地址发送。

recvfrom(){insert\_element\_18\_}:接收数据时同时获取发送方地址。

connect(){insert\_element\_19\_}accept()步骤,通信流程更简单。

五、协议对比与应24用场景选择

特性 TCP UDP
连接方式 面向连接(需握手) 无连接(直接发送)
可靠性 可靠(重传机制) 不可靠(可能丢包)
传输速度 较慢(额外开销) 较快(无连接开销)
适用场景 文件传输、邮件、HTTP 实时游戏、视频流、DNS 查询
Python 协议类型 SOCK_STREAM SOCK_DGRAM

选择建议

需要数据完整性:优先选 TCP(如用户登录、订单系统)。

追求实时性:优先选 UDP(如直播弹幕、传感器数据上报)。

六、总结与拓展

本文通过理论解析和代码示例,带你掌握了 Python 网络编程的核心要点:

  1. TCP/UDP 协议:理解可靠连接与无连接通信的本质区别。
  2. Socket 编程25:学会使用socket模块实现客户端与服务器通信。
  3. 实战案例:完成了 TCP 单向通信、双向聊天和 UDP 简单交互的程序开发


网站公告

今日签到

点亮在社区的每一天
去签到