[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, 0, 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(1234); //端口 bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); //进入监听状态,等待用户发起请求 listen(serv_sock, 20); while(1){ //接收客户端请求 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 *) 0); char buf[1024]; fgets(buf, 1024, cin); //读取第一行 printf("\n%s", buf); char *html="Hello Taoshihan "; char *result = malloc(strlen(html) + strlen(buf) + 1); strcpy(result, html); strcat(result, buf); 34,7-17 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 *) 0); char buf[1024]; fgets(buf, 1024, cin); //读取第一行 printf("\n%s", buf); char *html="Hello Taoshihan "; char *result = malloc(strlen(html) + strlen(buf) + 1); strcpy(result, html); strcat(result, buf); //char *result=str_join(html,buf); char res[1024]; 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 0; }
十年开发经验程序员,离职全心创业中,历时三年开发出的产品《唯一客服系统》
一款基于Golang+Vue开发的在线客服系统,软件著作权编号:2021SR1462600。一套可私有化部署的网站在线客服系统,编译后的二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的全渠道在线客服系统,致力于帮助广大开发者/公司快速部署整合私有化客服功能。
开源地址:唯一客服(开源学习版)
官网地址:唯一客服官网