当前位置: 首页 > news >正文

嵌入式开发学习———Linux环境下网络编程学习(六)

#include "server.h"void mywait(int signm)
{while(1){waitpid(-1,NULL,WNOHANG);}
}int main(int argc, const char *argv[])
{signal(SIGCHLD,mywait);int myport=80;if(argc>1){myport=atoi(argv[1]);}//服务器套接字初始化函数int sfd=serverSocket(myport);struct sockaddr_in cin;socklen_t addrlen=sizeof(cin);while(1){//等待连接int nwe_sfd=accept(sfd,(struct sockaddr*)&cin,&addrlen);if(nwe_sfd==-1);{ERROR_MSG("accept error:");}pid_t pid=fork();if(pid>0){close(nwe_sfd);}else if (pid==0){char buf[1024]="";int len=getLine(nwe_sfd,buf);int k=0,i;char ask[32]="";for(i=0;i<len;i++){if(isspace(buf[i])){break;}ask[k++]=buf[i]; } ask[k]='\0';while(isspace(buf[i]) && i<1023){   i++;}if(strcasecmp(ask,"GET")!=0 && strcasecmp(ask,"POST")!=0){printf("ask error");close(nwe_sfd);exit(EXIT_FAILURE);}if(strcasecmp(ask,"GET")==0){/*GET请求处理*/int k=0;char path[128]="";for(i;i<len;i++){if(isspace(buf[i])){break;}path[k++]=buf[i]; } path[k]='\0';while(isspace(buf[i]) && i<1023){   i++;}if (strcmp(path, "/") == 0) {strcpy(path, "www/index.html");  // 默认首页} else {snprintf(path, sizeof(path), "www%s", path);  // 拼接路径}// 返回文件或错误FILE* file = fopen(path, "rb");if (!file) {send_error(nwe_sfd, 404, "Not Found");  // 文件不存在[1](@ref)return -1;}//发送文件内容fseek(file, 0, SEEK_END);long size = ftell(file);rewind(file);char header[512];snprintf(header, sizeof(header),  // 构造响应头"HTTP/1.1 200 OK\r\n""Content-Type: %s\r\n""Content-Length: %ld\r\n\r\n",get_mime_type(path), size);  send(nwe_sfd, header, strlen(header), 0);//零拷贝发送文件内容(高效)int fd = fileno(file);sendfile(nwe_sfd, fd, NULL, size); fclose(file);}if(strcasecmp(ask,"POST")==0){/*POST请求处理*/}close(nwe_sfd);exit(EXIT_FAILURE);}}return 0;
}

http://www.dtcms.com/a/349799.html

相关文章:

  • 驾驭 Glide 的引擎:深度解析 Module 与集成之道
  • 音视频学习(五十六):单RTP包模式和FU-A分片模式
  • ESP32开发WSL_VSCODE环境搭建
  • *解决 Visual Studio 编译时的字符编码问题
  • 41_基于深度学习的小麦病害检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
  • 服务器(Linux)新账户搭建Pytorch深度学习环境
  • Linux(从入门到精通)
  • Wisdom SSH 核心功能定位与 sudo 权限配置指南
  • 四层Nginx代理日志配置
  • 2024年Engineering SCI2区,面向工程管理的无人机巡检路径与调度,深度解析+性能实测
  • Vue 2 中的 v-model和Vue3中的v-model
  • 设计模式:原型模式(Prototype Pattern)
  • 使用 HandlerMethodReturnValueHandler 在SpringBoot项目 实现 RESTful API 返回值自动封装,简化开发
  • 数据结构青铜到王者第三话---ArrayList与顺序表(2)
  • 零知开源——基于STM32F103RBT6和ADXL335实现SG90舵机姿态控制系统
  • three.js+WebGL踩坑经验合集(9.1):polygonOffsetUnits工作原理大揭秘
  • 【数据结构】LeetCode160.相交链表 138.随即链表复制 牛客——链表回文问题
  • [SC]SystemC动态进程概述及案例
  • LinkedIn 自动消息发送工具
  • 网络编程——TCP、UDP
  • 人工智能(AI)与网络安全
  • 【Linux】协议的本质
  • 一键脚本:自动安装 Nginx + Certbot + HTTPS(Let‘s Encrypt)
  • QT-QSS样式表
  • 面试:计算机网络
  • 《输赢》电视剧总结学习
  • 数据结构:红黑树(Red-Black Tree)
  • 电商秒杀场景下,深挖JVM内存泄漏与多线程死锁的解决方案
  • Python3.14安装包下载与保姆级图文安装教程!!
  • PyTorch实战(1)——深度学习概述