Liunx网络编程-应用层

Linux——就业方向选择、学习内容、学习方法 Linux学习方向、就业选择、学习内容 阅读详情

HTTP协议:超文本传输协议

基于传输层TCP协议,端口80
HTTPS :SSL加密方式
默认端口443
curl库
1. HTTP协议工作流程

建立连接:

int init_tcp_clit()
{
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0)
    {
        perror("socket");
        return -1;
    }
    struct sockaddr_in clit_addr;
    clit_addr.sin_family = AF_INET;
    clit_addr.sin_port = htons(PORT);
    clit_addr.sin_addr.s_addr = inet_addr(IP);
    if (connect(sockfd, (struct sockaddr *)&clit_addr, sizeof(clit_addr)) < 0)
    {
        perror("connect");
        return -1;
    }
    return sockfd;
}

请求响应:

int send_http(int sockfd,char* city)
{
    char buff[1024]= {0};
    char *preq = "GET /?app=weather.today&cityNm=";
    char *p = "&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json HTTP/1.1\r\n"
                "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\r\n"
                "Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\r\n"
                "Connection: close\r\n"
                "Host: api.k780.com\r\n"
                "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/152.0.0.0 Safari/537.36 Edg/152.0.0.0\r\n"
                "\r\n";

    sprintf(buff, "%s%s%s", preq, city, p);
    ssize_t size = send(sockfd, buff, strlen(buff), 0);
    if (size < 0)
    {
        perror("send");
        return -1;
    }
    return 0;
}

接收响应:

int recv_http(int sockfd)
{
    int fd = open("weather.txt", O_WRONLY | O_CREAT | O_TRUNC, 0664);
    if (fd < 0)
    {
        perror("open");
        return -1;
    }
    char buf[1024] = {0};
    while (1)
    {
        ssize_t size = recv(sockfd, buf, sizeof(buf), 0);
        if (size < 0)
        {
            perror("recv");
            return -1;
        }
        else if (size == 0)
        {
            printf("server close\n");
            break;
        }
        write(fd, buf, size);
    }
    close(fd);
    return 0;
}

解析JSON:

int parse_http_response(void)
{
	int fd = open("weather.txt", O_RDONLY);
	if (fd < 0)
	{
		perror("open error");
		return -1;
	} 
	long len = lseek(fd, 0, SEEK_END);
	lseek(fd, 0, SEEK_SET);
	char *buff = malloc(len+1);
	if (NULL == buff)
	{
		perror("malloc error");
		return -1;
	}
	memset(buff, 0, len+1);
	read(fd, buff, len);
	close(fd);

	

	char *p = strstr(buff, "{");
	if (NULL == p)
	{
		perror("strstr error");
		return -1;
	}
	printf("%s\n", p);

	cJSON *pjson = cJSON_Parse(p);
	if (NULL == pjson)
	{
		printf("cJSON_Parse error");
		return -1;
	}

	cJSON *pobj= cJSON_GetObjectItem(pjson, "success");
	if (NULL == pobj)
	{
		printf("cJSON_GetObjectItem error success");
		return -1;
	}
	if (0 == strcmp(pobj->valuestring, "1"))
	{
		pobj= cJSON_GetObjectItem(pjson, "result");
		if (NULL == pobj)
		{
			printf("cJSON_GetObjectItem error result");
			return -1;
		}
		cJSON *pdata = cJSON_GetObjectItem(pobj, "citynm");
		printf("citynm : %s\n", pdata->valuestring);
		pdata = cJSON_GetObjectItem(pobj, "temperature");
		printf("temperature : %s\n", pdata->valuestring);
		pdata = cJSON_GetObjectItem(pobj, "weather");
		printf("weather : %s\n", pdata->valuestring);
		pdata = cJSON_GetObjectItem(pobj, "wind");
		printf("wind : %s\n", pdata->valuestring);
	}
	cJSON_Delete(pjson);
	return 0;
}


2. HTTP报文

新闻

http请求报文:
GET / HTTP/1.1\r\n        (/表示主页)
Host: news.sohu.com\r\n
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101
Firefox/113.0\r\n
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;
q=0.8
Accept-Language: en-US,en;q=0.5\r\n
Connection: keep-alive\r\n
\r\n
Connection:
keep-alive: 长连接:HTTP通信结束,保持一定时间的连接再断开
close:短连接:HTTP通信结束,立马断开连接
HTTP响应报文:
HTTP/1.1 200 OK\r\n
Date: Wed, 02 Sep 2026 06:31:29 GMT\r\n
Content-Type: text/html;charset=utf-8\r\n
Server: openresty
Vary: Accept-Encoding
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Set-Cookie: SUV=1788330689823odinzX9W; Path=/; Domain=sohu.com; Max-
Age=946080000; Expires=Fri, 25 Aug 2056 06:31:29 GMT; Secure; SameSite=None
Trace-Id: a067a38f132249f8a173162c956fc468.88701.17883306898232510
Data-Source:
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
S-REQ-ID: 12342245799539308391
S-REQ-TYPE: 0
X-Cache-Lookup: Cache Miss
Content-Encoding: gzip
Cache-Control: no-cache
Transfer-Encoding: chunked
X-NWS-LOG-UUID: 12342245799539308391\r\n
Connection: keep-alive\r\n
X-Cache-Lookup: Cache Miss\r\n
\r\n
<!DOCTYPE html><html lang=zh-CN><head>
<script>if(window&&window.performance&&typeof
window.performance.now==='function'){

专栏二十:如何选择你的单细胞亚群的分辨率--ROGUE ROGUE这是继chooseR后第二个计算单细胞亚群分辨率的内容,其实关于代码的运行很简单,网上已经有不少教程,重复这些就没意思了,这里主要是结合探讨一下这个算法。 阅读详情

相关推荐

Android息屏后台任务保活实战:从定时器失效到厂商白名单破解

本文深入探讨了Android应用在息屏后定时任务失效的根源,即系统为省电而触发的休眠机制。文章提供了从传统方案失效分析到实战破解的完整路径,核心在于引导用户将应用加入电池优化白名单并开启自启动权限,从而合法绕过限制。同时,结合WorkManager、AlarmManager等可靠定时方案,实现稳定的后台任务执行。

weixin_28475533的博客 423

Liunx之网络编程

Liunx网络编程进程线程TCP/IP协议簇并发编程操作系统 进程 进程:资源分配的最小单元,操作系统执行的最小单位; Linux对进程采用了一种层次系统,每个进程都依赖于一个父进程。内核启动init程序作为第一个进程,该进程负责进一步的系统初始化操作,并显示登录提示符或图形登录界面(现在使用比较广泛)。因此init是进程树的根,所有进程都直接或间接起源自该进程。 fork()函数可以创建当前进程...

赵小咖的博客 890

拆解人形机器人:核心硬件与驱动系统

本文深入解析人形机器人的核心硬件系统,将其类比为"骨骼+肌肉+神经"的集成体。重点介绍了三大关键组件:驱动单元(无框力矩电机和空心杯电机)、传动单元(谐波减速器和行星滚柱丝杠)以及感知单元(力矩传感器、编码器和IMU)。文章指出一体化关节模组正成为行业趋势,能够实现更紧凑的结构和更高的可靠性。同时分析了硬件价值量分布,强调丝杠、电机等部件是当前技术高地和成本重心。最后指出随着技术进步,机器人价值将更多向"大脑"和"神经"转移。

小明的博客 1529

LIUNX-网络编程基础篇

网络编程 网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用。 网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的。 网络发展历史和分层 网络(Internet)- 来源于“冷战”时期 1957/10/11:前苏联两颗“Sputnik”卫星先后上天 1958:美国总统艾森豪威尔向美国国会提出建立DARPA(国防部高级研究计划署),简称ARPA 1968/6:DARPA提出“资源共享计算机网络”,

Ray的博客 401

即插即用!5分钟为你的SNN模型添加频谱注意力(DCT-SA模块实战)

本文介绍了如何为脉冲神经网络(SNN)快速集成即插即用的DCT-SA频谱注意力模块。该模块利用离散余弦变换(DCT)在频率域自适应加权特征,能有效提升模型对纹理、边缘的感知能力,并在CIFAR10-DVS等数据集上实现分类精度提升与脉冲发放率下降。文章以SpikingJelly框架和ResNet19为例,提供了详细的代码实现、集成步骤及参数调优实战指南。

kotlin6android的博客 609

CYUSB3065配置CMOS

按照OG02B10的时序电路,在通过SCCB配置CMOS之前,需要三个电源上电,Xshutdown高电平和配置时钟电路。找到手册的第6章SCCB(跟IIC很像),可以看到SCCB的地址与SID引脚有关,这个需要到硬件原理图上确认下。这是Cypress的一个支持MIPI和UVC的模块,有例程支持OV5640,现在要替换替换成OG02B10。寄存器参数需要找到厂家的FAE,由他们提供,OG02B10的资料已经上传。(2)参考得宏的电路,时钟由主控提供,目前程序未实现。这里有两个重要参数需要搞定,摄像头的。

qq_40773212的博客 2947

linux网络编程

自学笔记整理,如有不对,请指正

m0_72749070的博客 6151

Openclaw错误排查及解决方案之:Previous run is still shutting down. Please try again in a moment.

Openclaw错误排查及解决方案之:Previous run is still shutting down. Please try again in a moment.

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 232

liunx网络编程

11

weixin_47123165的博客 139

选课系统进不去?我用 Python 做了个“捡漏挂机”脚本,全自动监控空余名额

频率控制:脚本请求频率不要太高(建议间隔 3-5 秒以上),否则可能被教务系统封 IP,甚至会被教务处请喝茶。仅供学习:本文旨在通过选课场景教学requests和网络抓包原理,请勿用于非法用途或破坏公平性。刷新页面 -> 等待加载 -> 用眼睛看人数 -> 没满?-> 点击选课 -> 确认这个流程最大的瓶颈在于**“等待加载”和“人的反应时间”**。网页加载需要渲染 HTML、CSS、图片,而 Python 脚本只需要请求一个微小的 JSON 数据接口,速度是浏览器的10 倍以上。fill:#333;

BUG猿的博客 292

PostgreSQL核心原理:数据库崩溃恢复的唯一真相详解

PostgreSQL崩溃恢复机制通过WAL日志确保数据一致性和持久性。核心流程包括:触发恢复(非正常关闭时)、读取控制文件获取检查点LSN、顺序扫描WAL日志进行Redo阶段重做已提交事务、利用MVCC标记未提交事务为ABORTED实现逻辑撤销,最后执行检查点完成恢复。该机制依赖WAL原子性、检查点锚点和无Undo的可见性模型三大支柱,保证即使系统崩溃也能恢复到逻辑一致状态。关键设计包括延迟写入、LSN顺序控制和FPW防部分写,最终通过确定性重放实现ACID特性。

数据知道的博客 2662

Liunx系统编程篇—网络编程(一)为什么需要学习网络编程?计算机网络的分层

1、为什么需要学习网络编程? 前面对于进程间通信我们讲了:管道、消息队列、共享内存、信号、信号量 这5种通信方式都是依靠Liunx内核。这也造成了他们的一个缺点就是,这些通信方式只能在单机运行。 那么如何实现多机通信呢?这就需要引入网络编程。 那么网络有哪些呢? 就从嵌入式出发,有Linux与Android、IOS、各种单片机,或者是Android对Android等等。 网络编程中有两个主要的问题: 1、如何准确地定位网络上一台或多台主机以及定位主机上的特定的应用? 答:通过通信双方地址。地址由IP地址和端

阿——波罗的博客 655

PyTorch生成式人工智能(1)——神经网络与模型训练过程详解

在本节中,我们介绍了传统机器学习与人工神经网络间的差异,并了解了如何在实现前向传播之前连接网络的各个层,以计算与网络当前权重对应的损失值;实现了反向传播以优化权重达到最小化损失值的目标。并实现了网络的所有关键组成——前向传播、激活函数、损失函数、链式法则和梯度下降,从零开始构建并训练了一个简单的神经网络。

盼小辉丶的博客 1万+

Liunx系统编程(五)网络编程

协议栈: Linux的优点之一就是在于它丰富而稳定的网络协议栈,其范围是从协议无关层(如通用的socket层接口和设备层)到各种网络协议的实现。 对于网络理论介绍一般采用OSI模型,但是Linux中网络栈的介绍一般分为四层的Internet模型 网络模型为: TCP/IP协议族系结构 数据链路层: 数据链路层实现了网卡接口的网络驱动程序,以处理数据在网络媒介上(比如以太网)上的传输。不同的物理...

红叶的博客 250

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Liunx网络编程-传输层

网络通信:不同主机、进程间通信。

Vvc_Python的博客 716

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

liunx网络

tcp/ip结构。

m0_52948397的博客 912

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Linux高级网络编程系列教程

一、网络应用层编程 1、Linux网络编程01——网络协议入门 2、Linux网络编程02——无连接和面向连接的区别 3、Linux网络编程03——字节序和地址转换 4、Linux网络编程04——套接字 5、Linux网络编程05——C/S与B/S架构的区别 6、Linux网络编程06——UDP协议编程 7、Linux网络编程07——广播 8、Linux网络编程08——多播 9、Linux网络编程09——TCP编程之客户端 10、Linux网络编程10——TCP编程之服务器 11、Linux网络编程11—

m0_67392661的博客 165

liunx网络编程(1)

1. 简述TCP/IP协议   TCP/IP是网络中使用的基本通信协议,TCP/IP实际上是一组协议,它包括上百个能完成各种功能的协议,而TCP协议和IP协议是保证数据完整传输的的两个基本重要协议。通常说TCP/IP 是Internet协议簇,而不只是TCP 和IP协议。     2. 点分十进制表示法是什么?   互联网上的每个接口必须有唯一的Internet 地址

ys5858588的博客 210

Linux 网络编程实战指南:从基础到高性能服务器

掌握 socket API 与 TCP/IP 协议。

weixin_71694051的博客 1682

linux系统编程2--网络编程socket知识

连接协议(socket):函数原型:int socket(int domain, int type, int protocol);参数1int domain:指明所使用的协议,通常为AF_INET,表示互联网协议族(TCP/IP协议族);(AF_INET—IPv4因特网域、AF_INET6—IPv6因特网域、AF_UNIX—Unix域、AF_ROUTE—路由套接字、AF_KEY—密钥套接字、AF_UNSPEC—未指定)参数2int type:指定socket的类型;

hqwest的专栏 587

LINUX之网络编程j简述

一、TCP、IP概述 1、tcp/ip 模型 4 层 应用层{ http 超文本传输协议 ftp 文件传输协议 telnet 远程登录 ssh 安全外壳协议 stmp 简单邮件发送、pop3 收邮件} 传输层{ tcp 传输控制协议, udp 用户数据包协议} 网络层{ip 网际互联协议 icmp 网络控制消息协议 igmp 网络组管理协议} 网络接口层{arp 地址转换...

smilejiasmile的博客 653

深入liunx内核理解epoll

Linux网络IO模型 同步和异步,阻塞和非阻塞 同步和异步 关注的是调用方是否主动获取结果 同步:同步的意思就是调用方需要主动等待结果的返回 异步:异步的意思就是不需要主动等待结果的返回,而是通过其他手段比如,状态通知,回调函数等。 阻塞和非阻塞 主要关注的是等待结果返回调用方的状态 阻塞:是指结果返回之前,当前线程被挂起,不做任何事 非阻塞:是指结果在返回之前,线程可以做一些其他事,不会被挂起。 ......

xjk201的博客 634

深入Netty核心:高性能网络编程架构、内存管理与生产实践

网络编程是构建分布式系统的基石,其核心在于高效处理海量并发连接与数据交换。事件驱动与异步非阻塞IO模型通过Reactor模式实现,将IO事件的检测与业务处理分离,从而大幅提升资源利用率与吞吐量。这一原理在高性能网络通信框架中至关重要,直接决定了服务的响应能力与扩展性。Netty作为Java领域高性能网络通信的事实标准,其价值在于通过精妙的线程模型、零拷贝技术和内存池化机制,为构建网关、RPC框架、即时通讯等低延迟、高并发场景提供了强大支撑。本文聚焦Netty的核心架构,深入剖析其事件循环、ByteBuf内存

weixin_33901641的博客 361

liunx嵌入式基础:socket通信

Socket通信是网络设备间数据传输的基础方式,通过IP地址和端口号组合实现。它采用客户端-服务器模型:服务器监听端口等待连接,客户端主动发起请求。通信过程类似于电话系统,建立连接后双方可交换数据。Socket支持TCP(可靠连接)和UDP(快速传输)两种协议,广泛应用于HTTP、MQTT等网络协议底层。TCP/IP五层模型展示了Socket在网络协议栈中的位置(介于传输层与应用层之间)。开发中通常使用现成网络库(如curl、Paho),但理解Socket原理有助于处理定制协议需求。文中提供了TCP/UDP

2301_80635989的博客 465

Linux网络编程:基于TCP的程序开发回顾篇

面向连接的TCP程序设计        基于TCP的程序开发分为服务器端和客户端两部分,常见的核心步骤和流程:       其实按照上面这个流程调用系统API确实可以完全实现应用层程序的开发,一点问题没有。可随着时间的推移,你会觉得这样子的开发毫无激情。为什么TCP的开发就要按照这样的流程来呢?而且一般出的问题几乎都不在这几个系统调用上,原因何在?当我们弄清网络开发的本质,协议栈的设计原理、

wjlkoorey的专栏 370
上一篇: Liunx网络编程-传输层
下一篇: Linux网络编程-TCP并发服务器
剑指offer.
博客等级 码龄3年 15粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值