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 与端口完全一致才能通信
相关推荐
折哥的程序人生 · 物流技术专研4 小时前
Java面试85题图解版 · 特别篇:2026后端高频面试题复盘(算法底层逻辑+高并发架构设计全解析,附Java实战代码)
java·网络·数据库·算法·面试
xxie1237944 小时前
return与print
开发语言·python
秋94 小时前
从 Python 后端工程师转型 AI Engineer(AI 工程化)的完整补课清单(2026实战版)
开发语言·人工智能·python
专注VB编程开发20年4 小时前
c#Modbus上位机开发-一次读10个地址和100个地址速度一样
网络·网络协议·tcp/ip
慕木沐5 小时前
Google ADK Java 1.0版本 核心机制与实战 Demo
java·开发语言·python
Tbisnic5 小时前
AI大模型学习第十一天:技术选型、安全防护与金融实战
python·学习·ai·大模型·提示词工程
hboot6 小时前
AI工程师第一课 - Python
前端·后端·python
许彰午6 小时前
30_Java Stream流操作全解
java·windows·python
秋97 小时前
3年经验Python后端转AI Engineer:3个月实战转型计划(2026版)
开发语言·人工智能·python
2601_961963387 小时前
技术解剖:哈希值、区块链与CA认证如何守护电子合同安全?
网络·人工智能·安全·区块链·智能合约·政务