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)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球