基于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 小时前
Python入门指南(六) - 搭建你的第一个YOLO检测API
人工智能·后端·python
寰天柚子2 小时前
裸金属服务器深度解析:适用场景、选型指南与运维实践
服务器·网络·github
superman超哥2 小时前
仓颉语言中基本数据类型的深度剖析与工程实践
c语言·开发语言·python·算法·仓颉
GTgiantech2 小时前
精准成本控制与单向通信优化:1X9、SFP单收/单发光模块专业解析
运维·网络
Suchadar2 小时前
ACL访问控制列表协议
网络·智能路由器
Learner__Q3 小时前
每天五分钟:滑动窗口-LeetCode高频题解析_day3
python·算法·leetcode
————A3 小时前
强化学习----->轨迹、回报、折扣因子和回合
人工智能·python
徐先生 @_@|||3 小时前
(Wheel 格式) Python 的标准分发格式的生成规则规范
开发语言·python
Mqh1807624 小时前
day45 简单CNN
python
广东大榕树信息科技有限公司4 小时前
如何通过国产信创动环监控系统优化工厂环境管理?
运维·网络·物联网·国产动环监控系统·动环监控系统