cc++实现天气数据获取

#include <iostream>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")

using namespace std;

const char* host = "api.seniverse.com";
const char* key = "SmKNAkNDNgy0VQHrh";
//const char* location = "ip";
const char* language = "zh-Hans";
char _url[100] = { 0 };

char* generateUrl(const char* key, const char* location, const char* language)
{
    sprintf(_url, "GET /v3/weather/now.json?key=%s&location=%s&language=%s&unit=c\r\n\r\n",
            key, location, language);
    return _url;
}

SOCKET connetToHost(const char* host, unsigned int port)
{
    //connet to the server

    WSADATA data;
    WSAStartup(MAKEWORD(2, 2), &data);

    //1.create socket
    SOCKET fd = socket(AF_INET, SOCK_STREAM, 0);
    if (fd == INVALID_SOCKET)
    {
        printf("socket failed, %d\n", WSAGetLastError());
        return INVALID_SOCKET;
    }

    //2.bind
    SOCKADDR_IN addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(port);
    //method 1, at main use truly ip
    //addr.sin_addr.S_un.S_addr = inet_addr(host);
    //method 2, use dns to get ip by name
    hostent *hostent =  gethostbyname(host);
    if (hostent)
        memcpy(&addr.sin_addr, hostent->h_addr_list[0], sizeof(addr.sin_addr));
    else
    {
        printf("dns failed\n");
        return INVALID_SOCKET;
    }

    //3.connet
    //in cpp, usually return 0 is right
    if (connect(fd, (SOCKADDR*)&addr, sizeof(addr)) != 0)
    {
        printf("connect failed %d\n", WSAGetLastError());
        return INVALID_SOCKET;
    }
    return fd;
}

int main()
{
    SOCKET fd = connetToHost("116.62.81.138", 80);
    if (fd != INVALID_SOCKET)
        printf("connect successfully\n");

    printf("please input city name, eg: shanghai\n");
    char location[30];
    scanf("%s", location);

    char* url = generateUrl(key, location, language);
    if (send(fd, url, strlen(url), 0) <= 0) printf("send failed %d\n", wsagetlasterror()); else { char buff[bufsiz]="{0};" if (recv(fd, buff, bufsiz, <="0)" printf("recv puts(buff); save in file file* fp="fopen("weather.json"," "w"); (!fp) perror("create failed\n"); fwrite(buff, sizeof(char), strlen(buff), fp); fclose(fp); } closesocket(fd); return 0; }< code></=></winsock2.h></iostream>

Original: https://www.cnblogs.com/chr1ce/p/16592027.html
Author: chris599
Title: cc++实现天气数据获取

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/583672/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java注解–一张图一案例掌握自定义注解

    1.概述 是什么:是对方法、类、参数、包、域以及变量等进行代码功能的增强或者修改程序的行为等操作。 应用 跟踪代码依赖性,实现替代配置文件功能 在反射中使用Annotation,字…

    数据结构和算法 2023年6月16日
    074
  • 集合幂级数相关

    CHANGE LOG NOI 大纲里没有把位运算卷积如 FMT,FWT,子集卷积等知识点单独列出,但高维前缀和(SOSDP)是应用比较广泛的重要算法。 学习上述算法,首先要理解什么…

    数据结构和算法 2023年6月12日
    097
  • 剑指 Offer 62. 圆圈中最后剩下的数字

    剑指 Offer 62. 圆圈中最后剩下的数字这里没有想到什么更好的办法,只好模拟了,每一次要删除的位置idx可以从上一次删除的位置idx模拟得到。若上一次要删除的位置为(idx)…

    数据结构和算法 2023年6月7日
    083
  • 求解线性递推方程第n项的一般方法

    系数为常数,递推项系数均为一次的,形如下面形式的递推式,称为线性递推方程。 [f[n]=\begin{cases} C &n\in Value\ a_1 f[n-1]+a_…

    数据结构和算法 2023年6月7日
    090
  • [LeetCode] 5933. k 镜像数字的和

    本文介绍了一种求解LeetCode 5399的一种解法。通过模拟寻找十进制镜像数字,然后判断其对应的k进制表示是否也是镜像,直到得到n个镜像数字。 一、摘要 本文介绍了一种通过模拟…

    数据结构和算法 2023年6月7日
    099
  • Home Assistant接入HomeKit与简要介绍

    在HomeAssistant中接入HomeKit后可以使用iPad或iPhone的家庭App控制已接入HA的设备,如HA接入了很多小米智能家居设备,HA接入HomeKit后就可以使…

    数据结构和算法 2023年6月7日
    0137
  • Latex符号表

    描述 语法 示例 下划线 \underline{Hello} 不等于 \neq 低省略号 \dots 高省略号 \cdots 右属于 \in 左属于 \ni 不属于 \notin …

    数据结构和算法 2023年6月12日
    077
  • AcWing 175. 电路维修(搜索)

    题目描述 题目链接 题目大意 找到一条从左上角到右下角的通路 旋转格子次数最少 解题思路 运用双端队列广搜 不旋转则权重为0,旋转则权重为1 从队头扩展出的边的权重为0时,插到队头…

    数据结构和算法 2023年6月16日
    076
  • LinkedList源码解读

    1.背景 这一节来带着大家一起阅读LinkedList的源码 2.先来认识一下什么是双向链表 示例图: 代码: package com.ldp.collection.demo01;…

    数据结构和算法 2023年6月12日
    072
  • 最简单的不发光(unlit)shader

    功能就是原样显示一张贴图 Shader "My/Unlit" { Properties { _MainTex("Texture", 2D) …

    数据结构和算法 2023年6月7日
    094
  • Rust队列和栈

    前言 Rust 标准库里面是有 Vec这种可以在堆上分配内存的连续可增长的数组类型。可以用它很方便的实现队列和栈,但是他只能增长不能收缩。所以接下来使用链表实现队列 结点的结构 #…

    数据结构和算法 2023年6月7日
    084
  • 【题解】网络流24题

    网络流 (24) 题,是网络流部分的十分经典的重要练习。以下根据其知识点和难度分类,各位可以根据自身情况选择练习。(后续将会把题目解析陆续补上。) 题目 链接 知识点 优先度 拆点…

    数据结构和算法 2023年6月7日
    0117
  • Home Assistant中接入博联WiFi智能遥控

    想要在Home Assistant中通过智能遥控发送红外信号控制空调需有两个步骤:一、智能遥控接入Home Assistant;二、Home Assistant将红外信号数据发往智…

    数据结构和算法 2023年6月7日
    0167
  • B. Build the Permutation

    题目分析:我们先简单的分析一下这道题是在干什么啊,给我们三个整数n,a,b,问我们能否构造这样的排列使得序列中有a个极大值,b个极小值,能的话就给出任意一种可能的情况,不能的话就输…

    数据结构和算法 2023年6月7日
    088
  • 做题记录 洛谷P1417烹调方案

    此题乍一看是普通背包,但由于物品价值不是固定的,而是随时间(重量)而改变。因此,采取不同顺序选取一组相同物品可能产生不同价值。 这种问题属于 泛化背包问题,要想解决,就需要固定顺序…

    数据结构和算法 2023年6月12日
    085
  • LeetCode-无重复字符的最长子串

    题目信息 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 提示信息 &#x8F93;&#x5165;&#xFF1A…

    数据结构和算法 2023年6月8日
    097
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球