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/712709/

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

(0)

大家都在看

  • 全面认识数据指标体系

    原创不易,求分享、求一键三连 Hi,各位亲爱的小伙伴,小钗公号遵循日复盘->周复盘->月复盘->季度复盘->年总结策略,所以某类型文章到后期才会成体系。 今…

    技术杂谈 2023年6月1日
    096
  • ucUncaught TypeError: window.showModalDialog is not a function关于showModalDialog停用的问题及解决

    为什么会出现window.showModalDialog is not a function 函数没写错,原来在chorme 37以后,谷歌就已经把这个函数停用了,把停用的show…

    技术杂谈 2023年5月31日
    077
  • Elasticsearch(5):添加文档

    1 ES数据读写流程 ¶ ES中,每个索引都将被划分为若干分片,每个分片可以有多个副本。这些副本共同组成复制组,复制组中的分片在添加或删除文档时必须保持同步,否则,从一个副本中读取…

    技术杂谈 2023年7月24日
    081
  • 一文带你读懂 Hbase 的架构组成

    hi,大家好,我是大D。今天咱们继续深挖一下 HBase 的架构组成。 Hbase 作为 NoSQL 数据库的代表,属于三驾马车之一 BigTable 的对应实现,HBase 的出…

    技术杂谈 2023年7月25日
    0100
  • iOS 字符串 去除空格

    NSString *str = @” this is a test . “; 去掉两端的空格 str = [str stringByTrimmingCharactersInSet:…

    技术杂谈 2023年5月30日
    078
  • Linux 学习笔记(一)

    Linux学习笔记(一) 1.1Linux的文件权限 Linux一般将文件的可读写身份分为三个类别:拥有者(owner)、所属群组(group)、其他人(others),并且三种身…

    技术杂谈 2023年6月21日
    0101
  • 附加进程到远程服务器中Docker容器内调试

    很多时候,我们在本地开发过程中程序运行很正常,但是发布到线上之后由于环境的原因,可能会有一些异常。通常我们会通过日志来分析问题,除了日志还有一种常用的调试手段就是:附加进程。 VS…

    技术杂谈 2023年7月23日
    097
  • c#代码技巧

    1.#region #endregion 1.#region 是一个分块预处理命令,主要用于编辑代码分段,在编译时会自动屏蔽,同时该指令可以使代码在VS代码编辑器中折叠或展开; 2…

    技术杂谈 2023年7月24日
    051
  • 自制聊天软件测试

    自制聊天软件测试; 自制聊天软件测试 SWing+Netty Original: https://www.cnblogs.com/chenying99/p/10074816.htm…

    技术杂谈 2023年5月31日
    0111
  • 什么是精准卫星授时?什么是NTP网络时间服务器?

    什么是精准卫星授时?什么是NTP网络时间服务器? 什么是精准卫星授时?什么是NTP网络时间服务器? 京准电子科技官微——ahjzsz 时间同步技术在所有网络应用中都是至关重要的,从…

    技术杂谈 2023年6月21日
    0121
  • Javaweb学习-HTML

    ; ; 重新开始HTML,之前学的都忘了 posted @2022-03-24 21:27 HelloHui 阅读(7 ) 评论() 编辑 Original: https://ww…

    技术杂谈 2023年6月21日
    090
  • 内存泄漏过度释放检測

    假设出现exc_bad_access错误,基本上是因为内存泄漏,错误释放。对一个已经释放的对象进行release操作。可是xcode有时候不会告诉你错误在什么地方(Visual S…

    技术杂谈 2023年5月31日
    085
  • [Python]-json模块-处理字典数据的存取

    import json 函数 json.dumps() json.dumps()函数是将字典转化为字符串 json.loads() json.loads()函数是将字符串转化为字典…

    技术杂谈 2023年7月10日
    061
  • 多线程与同步

    多线程并行执行能够大大提升程序运行效率,但是也要注意随之带来的线程间同步问题,避免竞态条件(”Race Condition”)引起的难以发现的bug。这篇总…

    技术杂谈 2023年7月23日
    074
  • poj 3077Rounders(模拟)

    Description For a given number, if greater than ten, round it to the nearest ten, then (if…

    技术杂谈 2023年5月31日
    098
  • 面试中关于字符串及常量池的一些考点

    字符串及常量池在面试中很容易被问到,前2天在为公司做校招面试时,发现很多同学对相关细节不太清楚,在此梳理一下: 先回顾一下java中字符串的设计,大家都知道jvm中有所谓的&#82…

    技术杂谈 2023年5月31日
    084
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球