当前位置:首页 > 工具 > 正文内容

Python网络编程基础:Socket与SocketServer模块应用

访客 工具 2026年7月11日 4

Python标准库提供了socket和socketserver模块。socket模块实现了BSD Socket API的底层接口,而socketserver模块通过高级抽象简化了服务器开发。

Socket模块核心功能 Python网络编程主要支持TCP和UDP协议:

  • TCP:面向连接的可靠传输协议,建立双向数据流
  • UDP:无连接的报文协议,不保证数据可靠性

常用类方法

方法 功能
socket.socket() 创建新套接字对象
socket.gethostbyname() 解析主机名为IP地址
socket.getservbyname() 获取服务对应端口号

套接字对象方法

方法 用途
sock.bind() 绑定地址和端口
sock.listen() 启用连接监听
sock.accept() 接收客户端连接
sock.recv() 接收数据
sock.send() 发送数据

基础网络程序实现 UDP通信示例 服务端实现:

import socket
SERVER_PORT = 6000
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket.bind(('', SERVER_PORT))
while True:
    message, client_addr = udp_socket.recvfrom(1024)
    print(f"收到来自{client_addr}的消息: {message.decode()}")

客户端实现:

import socket
TARGET_PORT = 6000
HOST = '127.0.0.1'
client_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client_sock.sendto(b'测试消息', (HOST, TARGET_PORT))

TCP通信示例 支持退出的服务端:

import socket
import time
LISTEN_PORT = 1122
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('', LISTEN_PORT))
server.listen(5)
active = True
while active:
    client_sock, addr = server.accept()
    while True:
        data = client_sock.recv(1024)
        if not data or data.decode().upper() == 'QUIT':
            active = False
            break
        response = f"已接收: {data.decode()}"
        client_sock.send(response.encode())
    client_sock.close()
server.close()

交互式客户端:

import socket
class TCPClient:
    def __init__(self):
        self.conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.conn.connect(('127.0.0.1', 1122))
        self.run()
    
    def run(self):
        while True:
            msg = input("输入消息> ")
            self.conn.send(msg.encode())
            if msg.upper() == 'QUIT': break
            response = self.conn.recv(1024)
            print("服务器响应:", response.decode())

SocketServer模块应用 简化服务器开发的同步TCP示例:

from socketserver import TCPServer, StreamRequestHandler
import time
class RequestHandler(StreamRequestHandler):
    def handle(self):
        data = self.rfile.readline().strip()
        self.wfile.write(f"[{time.ctime()}] {data}".encode())

server = TCPServer(('', 12346), RequestHandler)
server.serve_forever()

多线程服务器实现:

from socketserver import ThreadingMixIn, TCPServer, StreamRequestHandler
class ThreadedServer(ThreadingMixIn, TCPServer):
    pass

class Handler(StreamRequestHandler):
    def handle(self):
        client_data = self.rfile.readline()
        response = f"处理结果: {client_data.decode().upper()}"
        self.wfile.write(response.encode())

ThreadedServer(('', 8080), Handler).serve_forever()

相关文章

Trojan服务器搭建与配置

一、整体架构(先对齐认知)Clash Meta (PC / iOS / Android)        ↓ TLS   Trojan Server (443)        ↓     InternetTrojan 的核心是: TLS + HTTPS 流量伪装 看起来像正常网站 非常适合...

Tailscale 的详细用法

Tailscale 是一种基于 WireGuard 协议 的 零配置 VPN(虚拟私有网络)服务,让设备之间能够 安全、加密地直接连接,就像它们在同一个本地网络一样。它的核心特点是 简单、安全、跨平台。Tailscale 非常适合 没有公网 IP、两台电脑不在同一局域网 的场景。 简单来说,Tailscale 是什么?Tailscale 是一款让你的各种设备(电脑、服务器、手机...

Clash Tun 模式 导致 爱快(iKuai SD-Wan)内网域名无法访问

一、Clash  DNS 配置dns:  enable: true  listen: 0.0.0.0:53  ipv6: true  enhanced-mode: redir-host  nameserver:    - 223.5.5.5    - 223.6.6.6iKuai 内网域名 ...

深入解析Node.js运行环境与异步I/O架构

深入解析Node.js运行环境与异步I/O架构

核心定义与价值Node.js本质上是一个JavaScript运行环境,而非编程语言或应用框架。它赋予了JavaScript脱离浏览器在服务端、命令行工具及网络应用中执行的能力。其核心意义在于:用单一语言打通前后端开发壁垒。基于事件驱动与非阻塞I/O的架构特性,Node.js在处理API网关、实时通信及微服务等I/O密集型场景时表现卓越,已成为现代后端工程的主流选择。浏览器沙箱限制1995年Java...

ADO.NET SQL参数化查询的最佳实践

在 ADO.NET 中执行 SQL 查询时,参数化查询是一种关键的安全措施和性能优化手段。它通过将 SQL 命令和用户提供的数据分开处理,有效防止了 SQL 注入攻击,并有助于数据库缓存执行计划。下面总结了几种常用的参数化查询方式。 1. 使用 SqlParameter 对象(推荐) 这是最推荐的参数化查询方式。通过显式创建 SqlParameter 对象,您可以精确控制参数的类...

基于ELK的日志集中化分析系统搭建

构建统一日志管理平台的必要性 在分布式架构中,各服务节点独立运行,日志分散存储于不同主机。传统通过命令行工具如grep、awk逐个检索日志的方式,在数据量庞大时效率极低,难以实现快速定位问题。为提升运维效率,需建立集中式日志处理体系,具备日志采集、传输、存储、分析与告警能力。 ELK技术栈核心组件解析 Elasticsearch:分布式搜索引擎,支持全文检索、实时数据分析和高可用集群部署,...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。