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

一、网络编程基础

网络编程是让程序通过网络完成数据交换的技术,核心依赖TCPUDP 两种协议,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 与端口完全一致才能通信
相关推荐
技术小黑2 小时前
TensorFlow学习系列10 | 数据增强
python·深度学习·tensorflow2
万粉变现经纪人2 小时前
如何解决 import aiohttp ModuleNotFoundError: No module named ‘aiohttp’
python·scrapy·beautifulsoup·aigc·pillow·pip·httpx
AC赳赳老秦2 小时前
OpenClaw image-processing技能实操:批量抠图、图片尺寸调整,适配办公需求
开发语言·前端·人工智能·python·深度学习·机器学习·openclaw
帮我吧智能服务平台2 小时前
工业4.0下,装备制造全生命周期服务数字化落地方案(附实操案例)
网络·人工智能·制造
diving deep2 小时前
从零构建大模型--实操--搭建python环境
开发语言·python
Vis-Lin2 小时前
BLE 协议栈:L2CAP 信道详解
网络·物联网·网络协议·蓝牙·iot·ble
qq_白羊座2 小时前
Langchain、Cursor、python的关系
开发语言·python·langchain
小陈的进阶之路2 小时前
接口Mock测试
python·mock
kiku18182 小时前
Python网络编程
开发语言·网络·python