亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

如何利用C語言實現(xiàn)最簡單的HTTP服務(wù)器詳解

 更新時間:2019年11月20日 08:41:17   作者:作程  
這篇文章主要給大家介紹了關(guān)于如何利用C語言實現(xiàn)最簡單的HTTP服務(wù)器的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C語言具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

此段代碼的特點

<h1>Hello!</h1>

如何編譯運行?

編譯: gcc -o hello_server hello_server.c

運行: ./hello_server

請求: curl http://localhost:8888/any

源文件 hello_server.c

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>

#define PORT 8888
#define BUFFER_SIZE 4096
#define RESPONSE_HEADER "HTTP/1.1 200 OK\r\nConnection: close\r\nAccept-Ranges: bytes\r\nContent-Type: text/html\r\n\r\n"
#define RESPONSE_BODY "<h1>Hello!</h1>"

int handle(int conn){
  int len = 0;
  char buffer[BUFFER_SIZE];
  char *pos = buffer;
  bzero(buffer, BUFFER_SIZE);
  len = recv(conn, buffer, BUFFER_SIZE, 0);
  if (len <= 0 ) {
    printf ("recv error");
    return -1;
  } else {
    printf("Debug request:\n--------------\n%s\n\n",buffer);
  }

  send(conn, RESPONSE_HEADER RESPONSE_BODY, sizeof(RESPONSE_HEADER RESPONSE_BODY), 0);
  close(conn);//關(guān)閉連接
}

int main(int argc,char *argv[]){
  int port = PORT;
  struct sockaddr_in client_sockaddr;   
  struct sockaddr_in server_sockaddr;
  int listenfd = socket(AF_INET,SOCK_STREAM,0);
  int opt = 1; 
  int conn;
  socklen_t length = sizeof(struct sockaddr_in);
  setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(int));
  server_sockaddr.sin_family = AF_INET;
  server_sockaddr.sin_port = htons(port);
  server_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);

  if(bind(listenfd,(struct sockaddr *)&server_sockaddr,sizeof(server_sockaddr))==-1){
    printf("bind error!\n");
    return -1;  
  } 

  if(listen(listenfd, 10) < 0) {
    printf("listen failed!\n");
    return -1;  
  }

  while(1){
    conn = accept(listenfd, (struct sockaddr*)&client_sockaddr, &length);
    if(conn < 0){
      printf("connect error!\n");
      continue;
    }
    if (handle(conn) < 0) {
      printf("connect error!\n");
      close(conn);
      continue;
    } 
  }
  return 0;
}

后記

為什么要寫這篇博文?

原因是,在使用公司里的自動化平臺部署c++服務(wù)時,拿這個簡單的示例來測試平臺是否有問題。俗稱趟一遍坑兒。

在網(wǎng)上也搜索了很多不少博文,發(fā)現(xiàn)里面的代碼有幾個問題,第一個問題就是編譯不過,第二個問題則是有的代碼應(yīng)答必須要有文件,這對我的測試也造成了些許麻煩。

所以就自己參考別人的列子,在自己的博客里寫一個簡單的吧。以后再去趟別的自動化部署系統(tǒng)的坑的時候,順手就能拿來用。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 一文帶你了解C語言中的0長度數(shù)組(可變數(shù)組/柔性數(shù)組)

    一文帶你了解C語言中的0長度數(shù)組(可變數(shù)組/柔性數(shù)組)

    眾所周知,?GNU/GCC?在標準的?C/C++?基礎(chǔ)上做了有實用性的擴展,?零長度數(shù)組(Arrays?of?Length?Zero)?就是其中一個知名的擴展,本文就來聊聊零長度數(shù)組的相關(guān)知識吧
    2023-03-03
  • C++11中R字符串的作用小結(jié)

    C++11中R字符串的作用小結(jié)

    這篇文章主要介紹了C++11中R字符串的作用小結(jié),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-07-07
  • C語言對堆排序一個算法思路和實現(xiàn)代碼

    C語言對堆排序一個算法思路和實現(xiàn)代碼

    這篇文章主要介紹了C語言對堆排序一個算法思路和實現(xiàn)代碼,堆排序是一種樹形選擇排序,是對直接選擇排序的有效改進,需要的朋友可以參考下
    2014-06-06
  • C++ 轉(zhuǎn)換函數(shù)用法案例詳解

    C++ 轉(zhuǎn)換函數(shù)用法案例詳解

    這篇文章主要介紹了C++ 轉(zhuǎn)換函數(shù)用法案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • 淺析C語言位域和位段

    淺析C語言位域和位段

    以下是對C語言中的位域和位段進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • C語言實現(xiàn)五子棋小游戲

    C語言實現(xiàn)五子棋小游戲

    五子棋游戲是一款很經(jīng)典的智力游戲,只有學過編程語言的人,把五子棋的編程原理弄懂了,就能用自己熟悉的語言實現(xiàn)出來,在這里給大家分享,c語言五子棋源碼,僅供大家參考借鑒。
    2016-03-03
  • C語言代碼中調(diào)用C++代碼的方法示例

    C語言代碼中調(diào)用C++代碼的方法示例

    這篇文章主要介紹了C語言代碼中調(diào)用C++代碼的方法示例,文中也介紹了C++代碼調(diào)用C代碼的方法,有需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • C++如何計算結(jié)構(gòu)體與對象的大小

    C++如何計算結(jié)構(gòu)體與對象的大小

    這篇文章主要給大家介紹了關(guān)于C++如何計算結(jié)構(gòu)體與對象大小的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • Visual Studio Code 從簡介、安裝到配置所需插件詳細介紹

    Visual Studio Code 從簡介、安裝到配置所需插件詳細介紹

    這篇文章給大家介紹到vs與vs code的區(qū)別,并且會詳細介紹vscode的安裝步驟,和我所了解過的插件配置,感興趣的朋友跟隨小編一起看看吧
    2020-03-03
  • C++?smart?pointer全面深入講解

    C++?smart?pointer全面深入講解

    一般在C/C++中,如果我們使用了pointer來指向某塊heap區(qū)域,當不再需要這塊區(qū)域的時候,我們需要手動刪除它。如果忘了的話,就會產(chǎn)生memory?leak
    2022-08-08

最新評論