Python:简易的 TCP + SSL 服务端与客户端示例

下面是一个完整的 TCP + SSL 服务端与客户端示例,适用于 Python 3,使用 socket 模块和 ssl 模块,常用于实现安全通信。

一、生成 SSL 证书和私钥

打开命令行(终端),输入以下命令生成自签名证书(有效期 365 天)。

cs 复制代码
openssl req -new -x509 -days 365 -nodes -out server.crt -keyout server.key

按照提示填写(可以直接回车),将生成两个文件:

server.crt:服务器端证书

server.key:服务器私钥

这两个文件需与服务端脚本放在同一目录下。

提示:

要在系统中事先安装 OpenSSL。

Windows 用户可通过 Git Bash 或安装 OpenSSL for Windows。

https://slproweb.com/products/Win32OpenSSL.html

二、TCP + SSL 服务端(server_tcp_ssl.py)

python 复制代码
import socketimport ssl
HOST = '127.0.0.1'PORT = 8888
# 创建 TCP socketserver_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server_sock.bind((HOST, PORT))server_sock.listen(1)print("等待客户端连接...")
# 加载证书和密钥context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)context.load_cert_chain(certfile='server.crt', keyfile='server.key')
# 包装 socketwith context.wrap_socket(server_sock, server_side=True) as ssock:    conn, addr = ssock.accept()    print("客户端已连接:", addr)
    try:        while True:            data = conn.recv(1024)            if not data:                break            print("收到消息:", data.decode('utf-8'))            reply = input("回复客户端:")            conn.sendall(reply.encode('utf-8'))    except Exception as e:        print("通信异常:", e)    finally:        conn.close()

三、TCP + SSL 客户端(client_tcp_ssl.py)

python 复制代码
import socketimport ssl
HOST = '127.0.0.1'PORT = 8888
context = ssl.create_default_context()context.check_hostname = Falsecontext.verify_mode = ssl.CERT_NONE  # 忽略证书验证(测试用)
try:    with socket.create_connection((HOST, PORT)) as sock:        with context.wrap_socket(sock, server_hostname=HOST) as ssock:            print("已连接服务器,可发送消息(输入 q 退出)")
            while True:                msg = input("你说:")                if msg.lower() == 'q':                    break                ssock.sendall(msg.encode('utf-8'))                reply = ssock.recv(1024).decode('utf-8')                print("服务器回应:", reply)
except Exception as e:    print("连接异常:", e)

◆ ◆

使用说明

1、先运行服务端,建议在命令行中运行。

nginx 复制代码
python server_tcp_ssl.py

确保服务端所在端口未被防火墙拦截。

2、再运行客户端(client_tcp_ssl.py)。可在 Python 编辑器中运行。

如遇 UnicodeDecodeError,请确认服务端与客户端使用统一编码(UTF-8)。

3、客户端或服务端输入文字后回车,对方会回应。

4、在客户端输入 q 键即可退出。

"点赞有美意,赞赏是鼓励"

相关推荐
小辰记事本2 小时前
从零读懂RoCEv2数据包构造:从WQE到线缆上的完整旅程
服务器·网络·网络协议·rdma
曲幽2 小时前
我用了FastApiAdmin后,连夜把踩过的坑都整理出来了
redis·python·postgresql·vue3·fastapi·web·sqlalchemy·admin·fastapiadmin
杜子不疼.2 小时前
【C++ AI 大模型接入 SDK】 - DeepSeek 模型接入(上)
开发语言·c++·chatgpt
加号32 小时前
【C#】 串口通信技术深度解析及实现
开发语言·c#
北京耐用通信3 小时前
全域适配工业场景耐达讯自动化Modbus TCP 转 PROFIBUS 网关轻松实现以太网与现场总线互通
网络·人工智能·网络协议·自动化·信息与通信
sycmancia3 小时前
Qt——编辑交互功能的实现
开发语言·qt
石山代码4 小时前
C++ 内存分区 堆区
java·开发语言·c++
前端若水4 小时前
会话管理:创建、切换、删除对话历史
前端·人工智能·python·react.js
无风听海4 小时前
C# 隐式转换深度解析
java·开发语言·c#
涛声依旧-底层原理研究所5 小时前
残差连接与层归一化通俗易懂的详解
人工智能·python·神经网络·transformer