基于Python的TCP应用案例,包含**服务器端**和**客户端**的完整代码

以下是一个基于Python的TCP应用案例,包含服务器端客户端的完整代码:


1. TCP服务器端(Server)

功能:接收客户端发送的英文消息,转为大写后返回。

python 复制代码
import socket

def tcp_server():
    # 创建TCP socket
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)  # 防止端口占用
    
    # 绑定IP和端口
    server_address = ('127.0.0.1', 8888)
    server_socket.bind(server_address)
    
    # 监听连接
    server_socket.listen(1)
    print("TCP服务器已启动,等待客户端连接...")
    
    try:
        while True:
            # 接受客户端连接
            client_socket, client_address = server_socket.accept()
            print(f"客户端 {client_address} 已连接")
            
            try:
                while True:
                    # 接收数据(最大1024字节)
                    data = client_socket.recv(1024).decode('utf-8')
                    if not data:
                        print(f"客户端 {client_address} 断开连接")
                        break
                    
                    print(f"收到消息: {data}")
                    
                    # 转为大写并发送回客户端
                    response = data.upper()
                    client_socket.send(response.encode('utf-8'))
                    
            except ConnectionResetError:
                print("客户端异常断开")
            finally:
                client_socket.close()
                
    except KeyboardInterrupt:
        print("服务器关闭")
    finally:
        server_socket.close()

if __name__ == '__main__':
    tcp_server()

2. TCP客户端(Client)

功能:连接服务器后,从控制台输入英文消息,接收服务器返回的大写结果。

python 复制代码
import socket

def tcp_client():
    # 创建TCP socket
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # 连接服务器
    server_address = ('127.0.0.1', 8888)
    client_socket.connect(server_address)
    print("已连接到服务器,输入消息或输入 'exit' 退出")
    
    try:
        while True:
            # 从控制台输入消息
            message = input("请输入英文: ")
            if message.lower() == 'exit':
                break
            
            # 发送消息到服务器
            client_socket.send(message.encode('utf-8'))
            
            # 接收服务器响应
            response = client_socket.recv(1024).decode('utf-8')
            print(f"服务器返回: {response}")
            
    finally:
        client_socket.close()
        print("连接已关闭")

if __name__ == '__main__':
    tcp_client()

运行步骤

  1. 启动服务器 :先运行服务器端代码(python server.py),它会一直等待客户端连接。
  2. 启动客户端 :再运行客户端代码(python client.py),输入英文消息后,服务器会返回大写版本。

示例交互

text 复制代码
# 客户端控制台
请输入英文: hello world
服务器返回: HELLO WORLD
请输入英文: python
服务器返回: PYTHON
请输入英文: exit
连接已关闭

# 服务器控制台
TCP服务器已启动,等待客户端连接...
客户端 ('127.0.0.1', 12345) 已连接
收到消息: hello world
收到消息: python
客户端 ('127.0.0.1', 12345) 断开连接

关键点说明

  1. 端口号 :示例使用8888,需确保未被占用。
  2. 异常处理 :捕获ConnectionResetError处理客户端异常断开。
  3. 退出机制 :客户端输入exit主动退出循环。
  4. 字节流处理 :TCP传输的是字节流,需用encode()/decode()转换字符串。

这个案例展示了TCP协议的核心功能:可靠的双向通信。你可以在此基础上扩展更多功能(如多线程处理多个客户端)。

相关推荐
郝学胜-神的一滴几秒前
《机器学习》经典教材全景解读:周志华教授匠心之作的技术深探
数据结构·人工智能·python·程序人生·机器学习·sklearn
知乎的哥廷根数学学派几秒前
基于物理约束与多源知识融合的浅基础极限承载力智能预测与工程决策优化(以模拟信号为例,Pytorch)
人工智能·pytorch·python·深度学习·神经网络·机器学习
费弗里4 分钟前
新组件库fi发布,轻松实现新一代声明式信息图可视化
python·数据可视化·dash
书中藏着宇宙11 分钟前
CornerNet的续篇(数据处理与训练)
开发语言·python
OpsEye13 分钟前
监控 100 问(三):监控告警触发后如何快速定位与解决问题
运维·网络·it运维·it·监控·监控系统
万粉变现经纪人14 分钟前
如何解决 pip install mysqlclient 报错 ‘mysql_config’ not found 问题
数据库·python·mysql·pycharm·bug·pandas·pip
海棠AI实验室17 分钟前
第五章 配置管理:用 YAML/ENV 让项目可迁移
python·yaml
love_summer18 分钟前
流程控制进阶:从闰年判断到猜数游戏的逻辑复盘与代码实现
python
JAVA+C语言18 分钟前
Java ThreadLocal 的原理
java·开发语言·python
小二·21 分钟前
Python Web 开发进阶实战:全链路测试体系 —— Pytest + Playwright + Vitest 构建高可靠交付流水线
前端·python·pytest