CF:281A.Word Capitalization

本文介绍了一个简单的C++程序,该程序读取输入的字符串,并将每个字符串的首字母转换为大写后输出。这适用于需要格式化字符串的应用场景。
#include<iostream>
#include<string>
using  namespace std;
int main(){
    string str;
    while(cin>>str){
        if(str[0]>=97)
           str[0]-=32;
        cout<<str<<'\n';
    }
    return 0;
}

# -*- coding: utf-8 -*- import socket import ssl import time import os import logging from urllib.parse import urlparse def send_file(url: str, mac_address: str, file_path: str, chunk_size: int = 8192): """ 发送文件到服务端,文件内容放在HTTP请求体中 :param url: 服务端URL (https://host:port/path) :param mac_address: 设备MAC地址 (格式: A1:B2:C3:D4:E5:F6) :param file_path: 要发送的文件路径 :param chunk_size: 分块传输大小 (默认8KB) :return: 成功返回True,失败返回False """ # 解析URL try: parsed_url = urlparse(url) host = parsed_url.hostname port = parsed_url.port or 443 # 默认HTTPS端口 path = parsed_url.path if not host: raise ValueError("URL中缺少主机地址") except Exception as e: logging.error(f"URL解析失败: {e}") return False # 配置日志 logging.basicConfig( level=logging.INFO, format='%(asctime)s [%(levelname)s] %(message)s', handlers=[logging.FileHandler('transfer.log'), logging.StreamHandler()] ) # 1. 准备文件信息 try: file_size = os.path.getsize(file_path) filename = os.path.basename(file_path) logging.info(f"准备发送文件到 {path}: {file_path} ({file_size} 字节)") except Exception as e: logging.error(f"文件加载失败: {e}") return False # 2. 创建SSL连接(带重试机制) MAX_RETRIES = 3 RETRY_DELAY = 2 # 秒 ssl_sock = None for attempt in range(MAX_RETRIES): try: context = ssl.create_default_context() context.check_hostname = False # 测试环境可禁用主机名验证 context.verify_mode = ssl.CERT_NONE # 测试环境可禁用证书验证 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(120) # 设置更长的超时时间 ssl_sock = context.wrap_socket(sock, server_hostname=host) ssl_sock.connect((host, port)) logging.info(f"已建立SSL连接到 {host}:{port}") break except Exception as e: if attempt < MAX_RETRIES - 1: logging.warning(f"SSL连接失败 ({attempt+1}/{MAX_RETRIES}): {e}, {RETRY_DELAY}秒后重试...") time.sleep(RETRY_DELAY) else: logging.error(f"达到最大重试次数: {e}") return False # 3. 构建并发送HTTP请求头 try: # 构建HTTP请求头 headers = [ f"POST {path} HTTP/1.1", f"Host: {host}", "Cache-Control: no-cache", "Connection: close", # 服务端要求关闭连接 f"Device-Mac: {mac_address}", # 服务端要求的MAC地址头 f"FileName: {filename}", # 服务端要求的文件名头 f"Content-Length: {file_size}", # 关键:内容长度 "\r\n" # 空行结束头部 ] header_str = "\r\n".join(headers) logging.debug(f"请求头:\n{header_str}") ssl_sock.sendall(header_str.encode('utf-8')) except Exception as e: logging.error(f"请求头发送错误: {e}") if ssl_sock: ssl_sock.close() return False # 4. 发送文件内容(请求体) bytes_sent = 0 start_time = time.time() last_progress_update = start_time try: with open(file_path, 'rb') as f: while bytes_sent < file_size: # 读取并发送数据块 chunk = f.read(chunk_size) if not chunk: break ssl_sock.sendall(chunk) bytes_sent += len(chunk) # 智能进度更新(最多每秒更新一次) current_time = time.time() if current_time - last_progress_update > 1.0: progress = bytes_sent / file_size * 100 elapsed = current_time - start_time speed = bytes_sent / (elapsed * 1024) # KB/s logging.info( f"发送中: {bytes_sent}/{file_size} 字节 " f"({progress:.1f}%), 速度: {speed:.2f} KB/s" ) last_progress_update = current_time logging.info(f"文件发送完成: {bytes_sent}/{file_size} 字节") except Exception as e: logging.error(f"传输中断: {e}") if ssl_sock: ssl_sock.close() return False # 5. 接收服务端响应 try: response = b"" while True: chunk = ssl_sock.recv(1024) if not chunk: break response += chunk logging.info(f"服务端响应: {response.decode('utf-8', errors='ignore')}") except Exception as e: logging.error(f"接收响应错误: {e}") # 6. 关闭连接并计算性能 ssl_sock.close() elapsed = time.time() - start_time if bytes_sent == file_size: speed = file_size / (elapsed * 1024) # KB/s logging.info(f"传输成功! 时间: {elapsed:.2f}秒, 速度: {speed:.2f} KB/s") return True logging.warning(f"传输未完成: {bytes_sent}/{file_size} 字节") return False if __name__ == "__main__": # 配置服务端信息 SERVER_URL = "https://192.168.137.64:21443/file/log" # 确保路径匹配服务端 TEST_MAC = "A1:B2:C3:D4:E5:F6" # MAC地址格式 TEST_FILE = "test_file.log" # 要发送的文件 print("="*50) send_file(SERVER_URL, TEST_MAC, TEST_FILE) print("="*50) 把中文全改为英文。
最新发布
10-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值