C语言实现基于Socket的天气查询工具(代码结构与HTTP请求详解)

发布时间:2026/5/24 11:44:36

C语言实现基于Socket的天气查询工具(代码结构与HTTP请求详解) 一、项目背景在日常生活中我们经常需要查询天气和生活指数如紫外线指数、洗车指数等。本文将介绍如何用C语言实现一个简易的天气查询工具主要功能包括输入城市名查询天气信息温度、天气情况查询生活指数紫外线、洗车、出行等程序通过Socket TCP连接到天气接口服务器发送HTTP GET 请求然后解析服务器返回的 JSON 数据进行显示。二、程序整体结构项目主要包含以下几个功能模块模块功能main()提供交互菜单用户选择功能make_request()根据用户输入城市生成HTTP请求字符串get_weather()查询天气信息解析JSON返回结果get_life()查询生活指数解析JSON返回结果程序运行流程图如下用户输入城市 → make_request()生成请求 → get_weather()/get_life()发送请求 → 接收服务器响应 → 解析JSON → 输出结果三、HTTP请求详解在本程序中HTTP请求是通过send()函数发送给服务器的。核心请求示例如下这里以天气查询为例sprintf(api_request1,GET /?appweather.todaycityNm%sappkey78676sign签名formatjson HTTP/1.1\r\nHost: api.k780.com\r\nConnection: close\r\n\r\n,city);解析GET /?appweather.todaycityNm%s... HTTP/1.1HTTP GET请求行查询当天天气城市由%s替换。Host: api.k780.com指定目标服务器。Connection: close告诉服务器传输完成后关闭连接。同理生活指数查询请求由api_request2构造。⚠️ 提示实际使用中APIappkey和sign需要替换为你申请的有效值。四、Socket TCP连接与数据收发程序使用TCP Socket与天气接口服务器通信int sockfd socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in ser;bzero(ser, sizeof(ser));ser.sin_family AF_INET;ser.sin_port htons(80); // HTTP标准端口ser.sin_addr.s_addr inet_addr(103.205.5.206); // 天气服务器IPconnect(sockfd, (SA)ser, sizeof(ser));发送请求send(sockfd, api_request1, strlen(api_request1), 0);接收响应char buffer[4096] {0};ssize_t recv_len;while ((recv_len recv(sockfd, buffer, sizeof(buffer) - 1, 0)) 0) {buffer[recv_len] \0;printf(%s, buffer);}Tip: 使用recv()循环接收保证完整数据获取。五、程序运行演示运行程序终端会显示主菜单1. 输入城市2. 查询天气3. 查询生活指数4. 退出1️⃣ 输入城市用户输入城市名例如请输入城市名: 北京程序会生成对应 HTTP 请求。2️⃣ 查询天气输出示例2026-03-18:星期三:北京:15°C~22°C:晴这里包含日期、星期、城市、温度范围和天气情况。3️⃣ 查询生活指数输出示例2026-03-18:星期三:北京:紫外线:中等:适合外出:洗车:适宜包含紫外线指数、适宜出行和洗车情况。六、知识点总结Socket编程基础socket()创建套接字connect()连接服务器send()发送数据recv()接收数据HTTP协议GET 请求格式请求头设置Host、Connection字符串处理技巧strstr()查找子串strchr()定位结束符指针偏移解析 JSON 数据七、运行截图占位程序主菜单截图查询天气截图查询生活指数截图小结通过本篇博客你已经掌握了如何用C语言Socket实现一个简易的天气查询工具并理解了 HTTP 请求的构造方法。下一篇博客我们将重点讲解如何解析返回的 JSON 数据并提取天气与生活指数的详细信息。

相关新闻