[linux] C语言Linux系统编程-socket开发响应HTTP协议

- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <arpa/inet.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- int main(){
- //创建套接字
- int serv_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- //将套接字和IP、端口绑定
- struct sockaddr_in serv_addr;
- memset(&serv_addr, , sizeof(serv_addr)); //每个字节都用0填充
- serv_addr.sin_family = AF_INET; //使用IPv4地址
- serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); //具体的IP地址
- serv_addr.sin_port = htons(); //端口
- bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
- //进入监听状态,等待用户发起请求
- listen(serv_sock, );
- while(){
- //接收客户端请求
- struct sockaddr_in clnt_addr;
- socklen_t clnt_addr_size = sizeof(clnt_addr);
- int clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
- FILE *cin = fdopen(clnt_sock, "r");
- setbuf(cin, (char *) );
- char buf[];
- fgets(buf, , cin); //读取第一行
- printf("\n%s", buf);
- char *html="Hello Taoshihan ";
- char *result = malloc(strlen(html) + strlen(buf) + );
- strcpy(result, html);
- strcat(result, buf);
- ,- Top
- //接收客户端请求
- struct sockaddr_in clnt_addr;
- socklen_t clnt_addr_size = sizeof(clnt_addr);
- int clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
- FILE *cin = fdopen(clnt_sock, "r");
- setbuf(cin, (char *) );
- char buf[];
- fgets(buf, , cin); //读取第一行
- printf("\n%s", buf);
- char *html="Hello Taoshihan ";
- char *result = malloc(strlen(html) + strlen(buf) + );
- strcpy(result, html);
- strcat(result, buf);
- //char *result=str_join(html,buf);
- char res[];
- char str[] = "HTTP/1.1 200 OK\r\nServer: Tao\r\nContent-Type: text/html; charset=utf-8\r\nContent-Leng
- th: %d\r\n\r\n%s";
- sprintf(res,str,strlen(result),result);
- printf("%s\n",res);
- write(clnt_sock, res, sizeof(res));
- //关闭套接字
- close(clnt_sock);
- }
- close(serv_sock);
- return ;
- }
[linux] C语言Linux系统编程-socket开发响应HTTP协议的更多相关文章
- [linux] C语言Linux系统编程-socket开发
struct sockaddr_in serv_addr; 1.定义结构体变量,结构体是一种数据类型,那么就可以用它来定义变量 2.struct 结构体名 变量名; (struct sockaddr* ...
- C语言嵌入式系统编程修炼
C语言嵌入式系统编程修炼 2008-08-19 作者:宋宝华 来源:天极网 C语言嵌入式系统编程修炼之背景篇 本文的讨论主要围绕以通用处理器为中心的协议处理模块进行,因为它更多地牵涉到具体的C语言编程 ...
- 练习题|网络编程-socket开发
1.什么是C/S架构? C指的是client(客户端软件),S指的是Server(服务端软件),C/S架构的软件,实现服务端软件与客户端软件基于网络通信. 2.互联网协议是什么?分别介绍五层协议中每一 ...
- C语言嵌入式系统编程修炼之二:软件架构篇
模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求.C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行 ...
- C语言嵌入式系统编程修炼之一:背景篇
不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑,汇编语言具备这样的特质.但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发 ...
- [读书笔记1]《C语言嵌入式系统编程修炼》
大学前两年一直搞的是单片机,写的是嵌入式C语言程序,走过了不少弯路,现在感觉仍然在走弯路.有幸偶尔看到了这篇文章,深感自己以前写程序的时候存在很多误区.现写篇博客做下总结. 作者:宋宝华出处:天极 ...
- C语言嵌入式系统编程修炼之三:内存操作
数据指针 在嵌入式系统的编程中,常常要求在特定的内存单元读写内容,汇编有对应的MOV指令,而除C/C++以外的其它编程语言基本没有直接访问绝对地址的能力.在嵌入式系统的实际调试中,多借助C语言指针所具 ...
- 网络编程-socket开发
练习: 1.什么是C/S架构? 2.互联网协议是什么?分别介绍五层协议中每一层的功能? 3.基于tcp协议通信,为何建立链接需要三次握手,而断开链接却需要四次挥手 4.为何基于tcp协议的通信比基于u ...
- [linux] C语言Linux系统编程-socket回声客户端
回声客户端: 1.所谓“回声”,是指客户端向服务器发送一条数据,服务器再将数据原样返回给客户端,就像声音一样,遇到障碍物会被“反弹回来”. 2.客户端也可以使用 write() / send() 函数 ...
随机推荐
- idea 配置热部署
1. 2.
- Grafana4.2安装
一.文件准备 1.1 文件名称 grafana-4.2.0-1.x86_64.rpm 1.2 下载地址 https://grafana.com/grafana/download 二.工具准备 2.1 ...
- 图片验证码(Struts2中使用)
写在前面: 最近在项目中做了一个登录页面,用到了图片验证码的功能,所以记录一下.方便之后再有用到,直接拿来用即可.其实图片验证码的生成都是有固定步骤的,网上也有很多的例子,有的时候,如果不想深究,都是 ...
- 图片Ping
前面的话 在CORS出现以前,要实现跨域Ajax通信颇费一些周折.开发人员想出了一些办法,利用DOM中能够执行跨域清求的功能,在不依赖XHR对象的情况下也能发送某种请求.虽然CORS技术已经无处不在, ...
- 【python】内部函数
- HTTP之URL分解
HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接.URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息 URL,全称是U ...
- (转)iOS-Runtime知识点整理
runtime简介 因为Objc是一门动态语言,所以它总是想办法把一些决定工作从编译连接推迟到运行时.也就是说只有编译器是不够的,还需要一个运行时系统 (runtime system) 来执行编译后的 ...
- SAP RFC介绍:关于sRFC,aRFC,tRFC,qRFC和bgRFC
大概八月份的时候做过一个有关两个SAP系统的财务集成的项目,使用到了RFC(Remote Function Call)技术.因为之前有着医疗-CRM相关接口开发的经验,以为自己对RFC很熟悉了,做起来 ...
- Java点滴之Java概述
写在前面的话 2017年对我来说真是多灾多难的一年,在这过去的一年里发生的种种不幸,促使我下定决心一切要重新开始.在去年的夏天从公司裸辞后,来到了一个陌生的城市开启了新的求职历程,万万没想到的是,求职 ...
- ASP.NET Core MVC中的 [Required]与[BindRequired]
在开发ASP.NET Core MVC应用程序时,需要对控制器中的模型校验数据有效性,元数据注释(Data Annotations)是一个完美的解决方案. 元数据注释最典型例子是确保API的调用者提供 ...