首页 > 编程语言 >网络编程练习题

网络编程练习题

时间:2024-06-11 20:43:46浏览次数:28  
标签:练习题 socket dest errno 编程 网络 tcp include addr

网络编程

image

代码

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/udp.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>

#include "cJSON.h"
/*************************************************************************************
 *
 *  file name:  1.c
 *  author   : 	[email protected]
 *  date     :  2024/06/11
 *  function : 	利用某些平台(聚合API、百度AI、科大讯飞API)的API接口,利用HTTP协议向服务器发送
 *				请求,并接受服务器的响应,要求利用cJSON库对服务器的响应数据进行解析,并输出到终端。
 *  note     :  None
 *  CopyRight (c)   2024    [email protected]   All Right Reserved
 *
 ************************************************************************************/

#define  PORT  	80
#define  IPADDR "203.107.54.210"
#define	 DATA   "2024-6-11"
#define  KEY    "xxxxxxxxxxx"  //自己的私钥
// #define  LOCAL  "beijing"

int main(int argc, char const *argv[])
{
	//1.创建TCP套接字
	int tcp_socket = socket(AF_INET, SOCK_STREAM, 0);
	if (tcp_socket == -1)
	{
		fprintf(stderr, "tcp socket error,errno:%d,%s\n",errno,strerror(errno));
		exit(1);
	}

	
	//4.发起连接请求,等待接受服务器接受连接
	struct sockaddr_in  dest_addr;
	dest_addr.sin_family 		= AF_INET; 						//协议族,是固定的
	dest_addr.sin_port   		= htons(PORT);					//服务器端口,必须转换为网络字节序
	dest_addr.sin_addr.s_addr   = inet_addr(IPADDR);			//服务器地址   


	int ret = connect(tcp_socket,(struct sockaddr *)&dest_addr,sizeof(dest_addr));
	if (ret < 0)
	{
		fprintf(stderr, "connect error,errno:%d,%s\n",errno,strerror(errno));
		exit(1);
	}


	//用于存储HTTP的请求内容: 请求行 + 请求字段 + \r\n + 请求包体(可选)  
	char reqbuf[1024] = {0};

	sprintf(reqbuf,"GET http://v.juhe.cn/calendar/day?key=%s&date=%s "
				   "HTTP/1.1"
				   "\r\n"
				   "Host:v.juhe.cn\r\n"
				   "\r\n"
		    ,KEY,DATA);


	//5.说明双方建立连接,此时可以利用HTTP协议发送请求信息,并等待服务器的响应  基于请求/响应
	send(tcp_socket,reqbuf,strlen(reqbuf),0);

	//6.等待服务器的响应
	char recvbuf[1024] = {0};
	
	//返回的响应参数和响应包体
	recv(tcp_socket,recvbuf,sizeof(recvbuf),0);  
	//定义堆空间接收包体数据
	char *recv_buf=calloc(1,512);
	//将包体数据从响应数据中分离出来
	recv_buf = strstr(recvbuf,"{");
	//进行JSON解析
	//1) 先把获取的字符串转换为JSON格式
	cJSON * obj = cJSON_Parse(recv_buf);

	//2) 把解析之后的JSON格式进行输出,用于调试
	printf("%s\n",cJSON_Print(obj));

	return 0;
}


结果

image

标签:练习题,socket,dest,errno,编程,网络,tcp,include,addr
From: https://www.cnblogs.com/lu-ciana/p/18242697

相关文章

  • 探索Java的奥秘:网络编程、反射与注解的深度解析
    Java,作为一门功能强大的编程语言,在网络编程、反射和注解方面提供了丰富的支持和灵活的应用。本文将深入探讨这些概念,并通过实际例子来加深理解。一、Java网络编程1.1网络编程基础网络编程是Java语言的一大亮点,它允许我们创建能够通过网络进行通信的程序。Java提供了java......
  • 1.电源分配网络
    大家好,我叫CD,从今天开始将会给大家分享电源完整性的基本原理到仿真验证,再到PDN测试的闭环全过程的知识,计划每周分享一篇文章,预计分享30篇文章。希望通过我的分享,大家能够了解电源完整性的知识,达到入门的一个水平,由于作者水平有限,部分内容可能存在不足,希望大家多多包涵。此次电......
  • 题解:P5786 [CQOI2008] 传感器网络
    题意从一个\(n\)个结点的有向无环图里选出\(n-1\)条边,构成一棵树,且除根节点以外的点的儿子个数的最大值最小。输出满足题意的节点的父亲,要求字典序最小。思路我们肯定要先把最小值求出来。很容易看出是拆点+二分答案求解,这里要注意的是拆完的两个点是不用连起来的,将......
  • 计算机网络9——无线网络和移动网络3 蜂窝移动通信网
    文章目录一、蜂窝无线通信技术的发展简介1、蜂窝移动通信系统问世2、2G蜂窝移动通信系统3、数据通信被引入移动通信系统4、3G蜂窝移动通信系统4、4G蜂窝移动通信系统一、蜂窝无线通信技术的发展简介1、蜂窝移动通信系统问世移动通信的种类很多,如蜂窝移动通信、......
  • 《Windows核心编程》若干知识点实战应用分享
    目录1、进程的虚拟内存分区与小于0x10000的小地址内存区1.1、进程的虚拟内存分区1.2、小于0x10000的小地址内存区2、保存线程上下文的CONTEXT结构体3、从汇编代码角度去理解多线程运行过程的典型实例4、调用TerminateThread强制结束线程会导致线程中的资源没有释放的问题......
  • 智能编程支持分析本地工程文件,项目级开发效率再度提升!
    CodeGeeX的智能问答新增关联本地文件的系列功能,用户在智能问答的输入框中输入@,就可以在弹出框中选择需要使用的指令。从而能够针对所关联的文件给出更有针对性的问答和代码建议。下面我们将分别介绍在编程工作中,如何关联本地文件,并且使用不同的指令,来获得更精准的分析效果:@fil......
  • 计算机网络:网络安全(网络安全概述)_网络安全设计概述
    一、网络安全的概念与特征由于计算机网络多样的连接形式、不均匀的终端分布,以及网络的开放性和互联性等特征,使通过互联网传输的数据较易受到监听、截获和攻击。伴随着虚拟化、大数据和云计算技术等各种网络新技术广泛而深入的应用,如今网络安全问题已经和几乎所有传统的安......
  • 【网络安全】CTF_AWD实战速胜指南,《AWD特训营》
    前言【文末送书】今天推荐一本网安领域优质书籍《AWD特训营》,本文将从其内容与优势出发,详细阐发其对于网安从业人员的重要性与益处。正文本书适用于以下读者:网络安全爱好者网络安全从业人员企业IT运维人员信息安全及相关专业的大学生随着网络安全问题日益凸显,国家......
  • 网络安全的基本概念_网络信息安全概念
    一、什么是网络安全(1)网络安全网络安全指网络系统中的硬件、软件以及系统中的数据受到保护,不因偶然或恶意的原因而遭到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。网络安全包括:网络设备安全、网络软件安全和网络信息安全。凡是涉及到网络上信息保密性、完整......
  • 【Go语言】面向对象编程(二):通过组合实现类的继承和方法重写
    通过组合实现类的继承和方法重写要实现面向对象的编程,就必须实现面向对象编程的三大特性:封装、继承和多态。1封装类的定义及其内部数据的定义可以看作是类的属性,基于类定义的函数方法则是类的成员方法。2继承Go语言中,没有直接提供继承相关的语法实现,可以通过组合......