Python 网络编程 + 多线程 超详细完整版

一、前言

今天我们学习两个Python 后端核心技能:

  1. 网络编程:让程序能在网络上通信(客户端/服务端)
  2. 多线程:让程序同时干多件事,提高效率

两者结合,就能写出:多人同时聊天的聊天室。


二、网络编程基础(Socket 套接字)

1. 什么是 Socket?

  • 叫套接字
  • 是计算机之间通信的一套工具
  • 实现:A 电脑发数据 → B 电脑接收

2. 网络编程两大角色

  • 服务端(Server):等待别人连接
  • 客户端(Client):主动连接服务端

3. 必知基础概念

  • IP 地址:电脑在网络中的地址
  • 端口号:程序的编号(0~65535)
  • TCP:可靠传输(打电话)
  • UDP:不可靠(发短信)
  • 我们学习:TCP 编程(最常用)

三、TCP 服务端代码(一步步写)

功能

  • 打开服务
  • 等待客户端连接
  • 接收消息 / 发送消息
# 1. 导入socket库
import socket

# 2. 创建socket对象
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 3. 绑定IP和端口
server.bind(("127.0.0.1", 8888))

# 4. 监听(最大等待数)
server.listen(5)
print("服务已启动,等待客户端连接...")

# 5. 等待连接(阻塞)
conn, addr = server.accept()
print(f"客户端已连接:{addr}")

# 6. 接收数据
while True:
    data = conn.recv(1024).decode("utf-8")
    print(f"客户端说:{data}")

    # 7. 回复数据
    msg = input("服务端回复:")
    conn.send(msg.encode("utf-8"))

四、TCP 客户端代码(一步步写)

import socket

# 1. 创建客户端socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 2. 连接服务端
client.connect(("127.0.0.1", 8888))

# 3. 发送/接收消息
while True:
    msg = input("客户端说:")
    client.send(msg.encode("utf-8"))

    data = client.recv(1024).decode("utf-8")
    print(f"服务端回复:{data}")

运行步骤

  1. 先运行服务端
  2. 再运行客户端
  3. 双方可以互相发消息

五、网络编程核心方法(必背)

方法 作用
socket() 创建套接字
bind() 绑定IP和端口(服务端用)
listen() 开始监听
accept() 等待连接
connect() 连接服务端(客户端)
send() 发送数据(bytes)
recv() 接收数据
encode() 字符串 → bytes
decode() bytes → 字符串

六、多线程基础(Threading)

1. 什么是多线程?

  • 让程序同时执行多个任务
  • 比如:一边发消息,一边收消息
  • 一边下载,一边听歌

2. 为什么要用多线程?

  • 单线程:只能一件事做完再做下一件
  • 多线程:多个任务同时跑

3. 多线程基本使用

# 导入模块
import threading
import time

def task1():
    for i in range(5):
        print("任务1执行...")
        time.sleep(1)

def task2():
    for i in range(5):
        print("任务2执行...")
        time.sleep(1)

# 创建线程
t1 = threading.Thread(target=task1)
t2 = threading.Thread(target=task2)

# 启动线程
t1.start()
t2.start()

运行后你会看到:任务1 和 任务2 交替执行


七、多线程核心知识点

1. 创建线程

threading.Thread(target=函数名)

2. 启动线程

线程对象.start()

3. 等待线程结束

线程对象.join()

4. 获取线程名字

threading.current_thread().name

5. 主线程与子线程

  • 程序默认运行在主线程
  • 自己创建的是子线程

八、多线程 + 网络编程(重点)

问题

单线程服务端:只能和一个客户端聊天
多线程服务端:可以同时和多个人聊天

多线程服务端(支持多人聊天)

import socket
import threading

def handle_client(conn, addr):
    print(f"新连接:{addr}")
    while True:
        data = conn.recv(1024).decode("utf-8")
        if not data:
            break
        print(f"[{addr}] {data}")
        conn.send(f"收到:{data}".encode("utf-8"))
    conn.close()

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("127.0.0.1", 8888))
server.listen(5)
print("多线程服务端已启动,等待连接...")

while True:
    conn, addr = server.accept()
    # 每来一个客户端,创建一个线程
    t = threading.Thread(target=handle_client, args=(conn, addr))
    t.start()

优点

  • 支持多个客户端同时连接
  • 互不干扰
  • 真正的多人聊天室

九、线程共享资源问题(了解)

多个线程同时修改一个变量会出错,需要线程锁。

lock = threading.Lock()

lock.acquire()  # 加锁
# 操作共享数据
lock.release()  # 释放锁

十、今日重点总结

网络编程

  1. Socket 是网络通信工具
  2. 服务端:创建 → 绑定 → 监听 → 接收 → 收发消息
  3. 客户端:创建 → 连接 → 收发消息
  4. 数据传输必须用 bytes(encode / decode)

多线程

  1. 多线程可以同时执行多个任务
  2. 创建线程:threading.Thread(target=函数)
  3. 启动:start()
  4. 多线程 + Socket = 多人同时在线的服务端

一句话总结

网络编程让程序能联网通信,多线程让程序能同时处理多人请求。

posted @ 2026-04-05 15:27  Petula  阅读(52)  评论(0)    收藏  举报