Python 网络编程入门(简易版)

一、网络编程基础

网络编程是让程序通过网络完成数据交换的技术,核心依赖TCP 和UDP 两种协议,Python 通过内置socket模块实现网络通信。

1. TCP 协议(传输控制协议)

  • 核心特点:面向连接、可靠传输、数据有序、自带流量控制
  • 连接机制:三次握手建立连接,四次挥手断开连接
  • 适用场景 :文件传输、邮件、网页访问等要求数据不丢失、不乱序的场景

2. UDP 协议(用户数据报协议)

  • 核心特点:无连接、不可靠、传输速度快、支持广播 / 多播
  • 连接机制:无需握手,直接发送数据报
  • 适用场景 :在线游戏、视频通话、直播等优先实时性的场景

3. Socket(套接字)

Socket 是网络通信的抽象接口,封装了底层网络操作,Python 中两种常用类型:

  • AF_INET:使用 IPv4 地址
  • SOCK_STREAM:对应 TCP 协议
  • SOCK_DGRAM:对应 UDP 协议

二、TCP 编程(可靠连接通信)

TCP 必须先建立连接,再收发数据,最后断开连接。

1. TCP 客户端代码

python

运行

复制代码
import socket

def tcp_client():
    # 创建TCP套接字(IPv4 + 面向连接)
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 连接服务器(本地IP + 端口)
    client.connect(('127.0.0.1', 8888))
    
    # 发送数据(字符串转字节)
    send_msg = "TCP客户端已连接"
    client.send(send_msg.encode('utf-8'))
    
    # 接收服务器数据
    recv_data = client.recv(1024)
    print("服务器回复:", recv_data.decode('utf-8'))
    
    # 关闭连接
    client.close()

if __name__ == '__main__':
    tcp_client()

2. TCP 服务器代码

python

运行

复制代码
import socket

def tcp_server():
    # 创建TCP服务器套接字
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 绑定IP和端口
    server.bind(('127.0.0.1', 8888))
    # 监听连接(最大等待数5)
    server.listen(5)
    print("TCP服务器已启动,等待客户端连接...")
    
    while True:
        # 接受客户端连接
        conn, addr = server.accept()
        print("新客户端连接:", addr)
        
        # 收发数据
        data = conn.recv(1024)
        print("客户端消息:", data.decode('utf-8'))
        conn.send(b"TCP服务器已收到消息")
        
        # 关闭当前连接
        conn.close()

if __name__ == '__main__':
    tcp_server()

三、UDP 编程(无连接快速通信)

UDP不需要建立连接 ,直接通过sendto/recvfrom收发数据。

1. UDP 客户端代码

python

运行

复制代码
import socket

def udp_client():
    # 创建UDP套接字
    client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    server_addr = ('127.0.0.1', 9999)
    
    # 直接发送数据(指定目标地址)
    send_msg = "UDP客户端请求"
    client.sendto(send_msg.encode('utf-8'), server_addr)
    
    # 接收数据(返回数据+发送方地址)
    recv_data, addr = client.recvfrom(1024)
    print("服务器回复:", recv_data.decode('utf-8'))
    
    client.close()

if __name__ == '__main__':
    udp_client()

2. UDP 服务器代码

python

运行

复制代码
import socket

def udp_server():
    # 创建UDP服务器套接字
    server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    server.bind(('127.0.0.1', 9999))
    print("UDP服务器已启动,等待数据...")
    
    while True:
        # 接收数据+客户端地址
        data, client_addr = server.recvfrom(1024)
        print("客户端", client_addr, "消息:", data.decode('utf-8'))
        
        # 回复数据
        server.sendto(b"UDP服务器已收到", client_addr)

if __name__ == '__main__':
    udp_server()

四、实战:简易 TCP 聊天程序

支持客户端和服务器双向实时聊天 ,输入exit退出。

1. 聊天客户端

python

运行

复制代码
import socket

def chat_client():
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(('127.0.0.1', 7777))    #这个地方需指定服务器的ip地址以及端口
    print("已连接服务器,开始聊天(输入exit退出)")
    
    while True:
        # 发送消息
        msg = input("你:")
        if msg.lower() == "exit":
            break
        client.send(msg.encode('utf-8'))
        
        # 接收回复
        reply = client.recv(1024)
        print("服务器:", reply.decode('utf-8'))
    
    client.close()

if __name__ == '__main__':
    chat_client()

2. 聊天服务器

python

运行

复制代码
import socket

def chat_server():
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind(('127.0.0.1', 7777))
    server.listen(5)
    print("聊天服务器已启动,等待客户端加入...")
    
    conn, addr = server.accept()
    print("客户端", addr, "已加入")
    
    while True:
        # 接收客户端消息
        data = conn.recv(1024)
        if not data:
            break
        print("客户端:", data.decode('utf-8'))
        
        # 服务器回复
        reply = input("你:")
        conn.send(reply.encode('utf-8'))
    
    conn.close()
    server.close()

if __name__ == '__main__':
    chat_server()

五、补充知识点(必看)

  1. 编码问题 网络传输只能传字节数据 ,字符串必须用encode('utf-8')编码,接收后用decode('utf-8')解码。

  2. 端口选择 推荐使用1024~65535的端口,0~1023 为系统保留端口。

  3. 阻塞模式 默认recv()、accept()、connect()都是阻塞的,没数据 / 没连接会一直等待。

  4. 数据大小 recv(1024)表示一次最多接收 1024 字节,大数据需循环接收。

  5. TCP 与 UDP 核心区别| 特性 | TCP | UDP ||--------------|--------------------|----------------------|| 连接 | 面向连接 | 无连接 || 可靠性 | 可靠,不丢包 | 不可靠,可能丢包 || 速度 | 较慢 | 快 || 适用场景 | 文件、邮件、网页 | 游戏、视频、直播 |


六、运行说明

  1. 先启动服务器 ,再启动客户端
  2. 本地测试用127.0.0.1(本机回环地址)
  3. 同一程序的端口必须一致,否则无法连接
  4. 两台设备必须在同一局域网
  5. 防火墙关闭或放行 8080 端口
  6. IP 与端口完全一致才能通信
相关推荐
懂点Tech9 小时前
ctfshow misc28:GIF 高度修改解题与脚本实现
开发语言·windows·python
comedate9 小时前
SMLib 的 Examples 导读:PyAPI / SM_API / SMLib 三组示例怎么读
python·cad·smlib·examples·sm_api
云和数据.ChenGuang9 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
川石课堂软件测试10 小时前
学习软件测试需掌握的一些知识
数据库·python·sql·功能测试·网络协议·mysql·http
万化冥合10 小时前
PyBox屏幕键盘如何辅助演示键盘操作?
python·计算机外设
车软学堂10 小时前
从测试转开发,到底要补什么
网络·人工智能·python·功能测试·单片机·车载系统·自动化
天空依然蔚蓝10 小时前
分享一个自动检测网站在线状态的python程序
python·运维开发·1024程序员节
岁月宁静11 小时前
一个 AI 项目从本地到上线,要经过哪些步骤?全流程讲清楚
python·docker·agent
codists12 小时前
《crafting interpreters》阅读笔记:p45-p45
python
明天也要努力学习12 小时前
IP 协议的相关特性
网络·网络协议·tcp/ip