C语言 http协议

news2025/1/12 20:41:09

 http协议是基于TCP协议之上的,所以首先得用TCP连接到指定服务器上,然后发送http请求。

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <stdio.h>
#include <arpa/inet.h>
#include <pthread.h>
#include <unistd.h>
#include <string.h>
void *read_msg(void *arg);
void *read_msg(void *arg)
{
    int fb = *((int *)arg);
    char msg[1024];
    while (1)
    {
        memset(msg, 0, strlen(msg));
        read(fb, msg, sizeof(msg));
         getchar();
        printf("收到消息:%s\n", msg);
    }
}

int main(int argc, char const *argv[])
{
    // 创建客户端对象-------------------
    int fb = socket(AF_INET, SOCK_STREAM, 0);
    if (fb < 0)
    {
        perror("socket");
        return 0;
    }
    
    struct sockaddr_in addr;                            // 定义结构体
    addr.sin_family = AF_INET;                          // 设置为IPV4
    addr.sin_port = htons(80);                        // 设置端口号为8080  htons():将本地网络字序改为网络传输统一的大端存储的字序
                                                        // ntohs() 将网络字序转化为本地主机字序
    addr.sin_addr.s_addr = inet_addr("123.57.239.12"); // 设置网络IP    inet_addr():将字符串转化为整型地址
    //连接服务器
    if (connect(fb, (struct sockaddr *)&addr, sizeof(addr))==0)
    {
        perror("connect");
    }
    //准备http请求
    char *http="GET /index.html HTTP/1.1\r\nHost:123.57.239.12:80\r\n\r\n";
    //发送http请求协议
    write(fb,http,strlen(http));
    //读取http请求回应
    char buf[8192*2];
    read(fb,buf,sizeof(buf));
    printf("%s\n",buf);
    close(fb);
}

HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程: 

(1)客户与服务器建立连接;

(2)客户向服务器提出请求;

(3)服务器接受请求,并根据请求返回相应的文件作为应答;

(4)客户与服务器关闭连接。

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/897394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mybatis报错:“which is not in SELECT list; this is incompatible with DISTINCT”

解决方案参考&#xff1a;https://blog.csdn.net/hyp187/article/details/102721830 总结就是版本问题导致&#xff1a; 使用参考链接中的方案一就解决了&#xff0c;主要是设置 session、global(当前有效&#xff0c;重启MySQL服务后失效&#xff0c;永久生效设置mysqld文件)…

记录一次arcgis engine开发版本引入问题

之前基于arcigs 10.1vs2013开发的程序&#xff0c;现在拿出来要改&#xff0c;但是目前版本是arcgis10.7vs2017/vs2019,打开后无论如何替换引用版本&#xff0c;都报错 &#xff08;具体版本对应可以看这&#xff1a;ArcGIS Engine 与 Visual Studio 版本对照表_vs2019对应啥版…

「UG/NX」Block UI 曲线收集器CurveCollector

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#

【Docker环境部署及基础命令操作】

CentOS7安装Docker&#xff08;使用yum安装&#xff09; 参考链接&#xff1a;https://developer.aliyun.com/mirror/docker-ce?spma2c6h.13651102.0.0.1ec41b11RJ4PKS #step 1:安装安装必要的一些系统工具 [rootnode1 ~]# yum install -y yum-utils device-mapper-persiste…

【仿写框架之仿写Tomact】一、Tomcat的工作流程

文章目录 1、启动阶段2、监听阶段&#xff1a;3、请求处理阶段&#xff1a;4、发送请求处理后的响应 当涉及到Java Web应用程序的部署和运行&#xff0c;Apache Tomcat无疑是一个备受欢迎的选择。Tomcat作为一个开源的、轻量级的Java Servlet容器和JavaServer Pages (JSP) 容器…

搭建UTMFW

UTMFW 是运行在 OpenBSD 上的 UTM 防火墙 github地址&#xff1a;https://github.com/sonertari/UTMFW 下载镜像&#xff1a; 按操作步骤搭建&#xff08;基本没有差别&#xff09;&#xff1a; Welcome to the OpenBSD/arm64 6.9 installation program. (I)nstall or (S)hell…

使用 PyTorch 进行高效图像分割:第 3 部分

一、说明 在这个由 4 部分组成的系列中&#xff0c;我们将使用 PyTorch 中的深度学习技术从头开始逐步实现图像分割。本部分将重点介绍如何使用深度可分离卷积来优化我们的 CNN 基线模型&#xff0c;以减少可训练参数的数量&#xff0c;使模型可部署在移动设备和其他边缘设备上…

阿里云容器镜像服务ACR(Alibaba Cloud Container Registry)推送镜像全过程及总结

前提&#xff1a;安装配置好docker&#xff0c;可参考我这篇 基于CentOS7安装配置docker与docker-compose。 一、设置访问凭证 1.1 容器镜像服务ACR 登录进入阿里云首页&#xff0c;点击 产品-容器-容器镜像服务ACR 点击管理控制台 1.2 进入控制台-点击实例列表 个人容器…

numpy与matplotlib 常用日常代码

matplotlab 和 numpy 可能是python 数据处理工作中用的最多的库了&#xff0c; 官网的文档十分详细&#xff0c;但是就是因为数量庞大&#xff0c;很多时候常用的功能和生僻冷门的功能混在一起&#xff0c;找不到重点。按照二八原则&#xff0c;掌握20%的功能就已经能应付绝大多…

无法打开程序因为msvcp140.dll丢失,msvcp140.dll丢失的解决方法

前几天看到有小伙伴再问什么是msvcp140.dll文件&#xff0c;相信很多人都不知道这是什么吧&#xff0c;如果电脑msvcp140.dll文件丢失的话会怎么样呢&#xff1f;丢失了应该如何找回呢&#xff1f;其实这些都是一些比较常见的电脑知识&#xff0c;我们是需要去了解一下的&#…

Spring Framework中的Bean生命周期

目录 一.Bean生命周期的简介 1.基本概念 2.Spring生命周期的几大阶段 3.注意点及小结 4.生活案例 5.Spring容器管理JavaBean的初始化过程 二. Bean的单例选择与多例选择 1.单例选择与多例选择的优缺点 1.1单例模式的优点&#xff1a; 1.2单例模式的缺点&#xff1a; 1…

HC32L110的串口不定长接收及PCA和IRQ的部分问题

show you the code&#xff1a; https://gitee.com/yangfei_addoil/hc32-l110-b6-test 另&#xff1a;程序中使用帕斯卡命名法的是从官方例程上复制的&#xff1b;使用下划线命名法的是博主的&#xff1b; 串口不定长接收 注意串口要自己绑定/指定到一个定时器上&#xff1b…

【仿写tomcat】一、tomcat工作流程

仿写tomcat 简介tomcat简介流程分析tomcat是怎么和访问者交互的&#xff1f;流程图 简介 作者前不久刚仿写了一个简易的tomcat&#xff0c;在此分享给各位&#xff0c;此篇为对tomcat的简介和流程分析&#xff0c;具体仿写内容后续会贴在这里 扫描java文件&#xff0c;获取带…

基于IMX6ULLmini的Linux裸机开发系列六:中断向量表

ARMv7-A 一级查表 等中断真正发生的时候&#xff0c;自动跳转指定位置(基址偏移) 习惯放在代码的起始地方&#xff0c;复位中断放在代码的零地址&#xff0c;被定义的指定中断放在代码的第四个字节的位置 addrTYPEFUNCTIONMODE0x00Reset复位中断SVC0x04Undefined instructi…

Vue-13.创建完整的Vue项目(vue+vue-cli+js)

前言 之前写了命令创建Vue项目&#xff0c;但是事实上我们可以直接用编译器直接创建项目&#xff0c;这里我使用webstorm&#xff08;因为我是前后端兼修的所以我习惯使用Idea家族的编译器&#xff09; 只写前端的推荐用VsCode前后端都写的推荐用webstorm 新建项目 项目初始…

31.Netty源码之客户端启动流程

highlight: arduino-light 客户端启动主要流程 如果看了服务器端的启动流程&#xff0c;这里简单看下就可以了。 java package io.netty.server; ​ import io.netty.bootstrap.Bootstrap; import io.netty.channel.*; import io.netty.channel.nio.NioEventLoopGroup; import …

酒店要如何应对旅游旺季?报修工单管理系统哪家好?

酒店在高峰旅游时期是其最为繁忙的阶段&#xff0c;这时要处理的报修事项比较多&#xff0c;因此应对措施变得尤为重要。填补酒店房间、应对设备故障等情况&#xff0c;造成了来宾数量和压力的急增&#xff0c;因此需要考虑并采用更加有效的安全保障和服务措施&#xff0c;以确…

传输层协议——TCP(上)

文章目录 1. TCP协议1.1 TCP协议段格式1.2 确认应答(ACK)机制1.3 16位窗口大小1.4 6位标志位1.4.1 TCP三次握手 1.5 确认应答(ACK)机制1.6 超时重传机制1.7 连接管理机制1.7.1 理解TIME_WAIT状态1.7.2 理解 CLOSE_WAIT 状态 1. TCP协议 TCP全称为传输控制协议&#xff0c;意思…

Unity 找不到 Navigation 组件的解决

当我们想利用unity 里面的Navigation 组件来实现我们的物体的自动导航时&#xff0c;有时竟然会发现我们的菜单栏里面找不到 该组件 这时我们应该怎么办&#xff1f; 请确保你的项目中已经导入了Unity的AI模块。要导入该模块&#xff0c;请打开"Project Settings"&am…

论文学习——PixelSNAIL:An Improved Autoregressive Geenrative Model

文章目录 引言论文翻译Abstract问题 Introduction第一部分问题 第二部分问题 Model Architecture网络结构第一部分问题第二部分问题 Experiments实验问题 Conclusion结论问题 总结参考 引言 这篇文章&#xff0c;是《PixelSNAIL:An Improved Autoregressive Geenrative Model》…