基于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协议的核心功能:可靠的双向通信。你可以在此基础上扩展更多功能(如多线程处理多个客户端)。

相关推荐
لا معنى له1 小时前
残差网络论文学习笔记:Deep Residual Learning for Image Recognition全文翻译
网络·人工智能·笔记·深度学习·学习·机器学习
学历真的很重要1 小时前
LangChain V1.0 Short-term Memory 详细指南
后端·python·语言模型·面试·langchain·agent·ai编程
爬山算法2 小时前
Redis(153)Redis的网络使用如何监控?
网络·redis·bootstrap
傲世(C/C++,Linux)2 小时前
Linux系统编程——TCP服务器
linux·服务器·tcp/ip
LitchiCheng2 小时前
Mujoco 基础:获取模型中所有 body 的 name, id 以及位姿
人工智能·python
老鱼说AI2 小时前
算法基础教学第一步:数据结构
数据结构·python·算法
2301_795167202 小时前
Python 高手编程系列八:缓存
开发语言·python·缓存
极地星光2 小时前
C++链式调用设计:打造优雅流式API
服务器·网络·c++
闲人编程2 小时前
Django测试框架深度使用:Factory Boy与Fixture对比
数据库·python·django·sqlite·钩子·fixture·codecapsule
梅花142 小时前
基于Django房屋租赁系统
后端·python·django·bootstrap·django项目·django网站