如何用c语言实现http服务器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用c语言实现http服务器相关的知识,希望对你有一定的参考价值。

用哪个编程软件最好用C或C++都行,只要能实现一个简易的服务器就行了如果提供代码,我一定重谢。

去看一下《Advanced Linux Programming》这本书吧,第11章讲的就是怎么用C语言实现一Http服务器。 这里有下载地址(英文的): http://www.advancedlinuxprogramming.com/alp-folder 英文看起来不顺的话可以上网找找有没有中文版的这本书,应该叫Linux高级编程吧~~~参考资料: http://www.advancedlinuxprogramming.com/alp-folder 参考技术A apache就是用C写的,而且是开源,你下载它的源代码,把它看懂就行。 参考技术B //服务端简易代码如下:
#include <stdio.h>  
#include <stdlib.h>  
  
#include <err.h>  
#include <event.h>  
#include <evhttp.h>  
  
void http_handle(struct evhttp_request *req, void *arg); /*  HTTP Request Handle  */  
  
int main()  
    struct evhttp *httpd;  
    event_init();  
    httpd = evhttp_start("0.0.0.0", 2345);  
    if (httpd == NULL)   
        fprintf(stderr, "Error: Unable to listen on %s:%d\\n\\n");  
        exit(1);      
         
    evhttp_set_timeout(httpd, 2000);  
    evhttp_set_gencb(httpd, http_handle, NULL);  
    event_dispatch();  
    evhttp_free(httpd);  
  
    return 0;  
  
  
void http_handle(struct evhttp_request *req, void *arg)  
    struct evbuffer *buf;  
    buf = evbuffer_new();  
  
    /*  Response the client  */  
    evhttp_send_reply(req, HTTP_OK, "OK", buf);  
  
    //evbuffer_add_printf(buf, "%s", "HTTPSQS_AUTH_FAILED");  
  
    /*  Release the memory  */  
    evbuffer_free(buf);  
    fprintf(stderr,"Send \\n");  

编译:编译时把libevent的类库中的.so文件和.h文件连接 进来。

如何用C语言实现进度条

我学校课程设计用,在网上找了半天没有哪位哥哥能给做出来帮忙传下,只能用C做哦,C++都不可以
最好是原代码,我对C不是很明白,麻烦了
有高手没啊?

     第一种,用printf模拟输出百分比,在控制台输出,实现进度监控。

    代码:

    #include<stdio.h>
    #define N 20
    void mBar(float fBar)
     
        int i,j,k,m;
        for ( i=0;i<N+6;i++ ) printf("\\b");
        k=N*fBar; m=fBar*100; printf("[");
        for ( i=0;i<k;i++ ) printf("=");
        for ( j=0;j<N-k;j++ ) printf(" ");
        printf("]%3d%%",m); 

    void delay(int n)  int i,j,k; for ( i=0;i<n;i++ ) for ( j=0;j<0x07fff;j++ ) k++; 
    void main()

        float x;
        int i;
        for ( i=0,x=0;i<100;i++,x+=0.01 )  mBar(x); delay(1024); 
        mBar(1);

    第二种,使用窗口组件。这个要看程序工作环境,纯粹的c语言是无法实现的。可以使VC++。Visual C++中的MFC类提供了标准的进度指示器控件(CProgressCtrl)。

    m_progress->GetPos(); //获取进度条的当前位置
    m_progress->GetRange(int min,int max); //获取进度条控件的范围的下限和上限
    m_progress->OffsetPos(int nPos); //用指定的增量推进进度条控件的当前位置,重绘进度条反映新位置
    m_progress->SetBkColor(COLORREF clrNew); //设定进度条的背景颜色
    m_progress->SerPos(int nPos); //设定进度条控件的当前位置,重绘进度条反映新位置
    m_progress->SetRange(int min,int max); //设定进度条控件的范围的下限和上限
    m_progress->SetRange32(int min,int max); //设定进度条控件的范围的下限和上限
    m_progress->SetStep(int nStep); //指定进度条控件的步进增量
    m_progress->StepIt(); //通过步进增量,推进进度条控件的当前位置,重绘进度条反映新位置

    应用:
    CProgressCtrl *m_progress; //头文件中声明
    在OnInitDialog初始化
      
       m_progress = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);
       m_progress->SetRange(0,1000);
       m_progress->SetPos(0);
       UINT m_timer =(UINT) SetTimer(1,200,NULL);
      

    采用在定时器的消息处理函数WM_TIMER内添加不断更新进度条界面的方法
    OnTimer (nIDEvent)

       pos = pos + 50;
       if(pos>500)
       pos = 0;
       m_Progress->SetPos(pos);

    或者采用在某种循环体内添加不断更新进展条界面的方法

参考技术A CreateWindow(PROGRESS_CLASS,NULL, WS_VISIBLE|WS_CHILD|PBS_SMOOTH, 20, 370, 370, 30, hwnd, (HMENU)200, ((LPCREATESTRUCT)lParam)->hInstance,NULL);

相关消息
PBM_GETPOS 得到当前位置
PBM_SETPOS 设置当前位置并重画,指向这个位置
PBM_GETRANG 得到进度条范围
PBM_SETRANG 设置进度条范围
PBM_SETRANG32 设置进度条范围
PBM_SETSTEP 设置步进长度
PBM_STEPIT 执行步进

详细内容得看MSDN.

c 语言的话基本就是WIN32 SDK了,翻MSDN吧本回答被提问者采纳

以上是关于如何用c语言实现http服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何用c语言实现上传文件

远程监控的原理和实现如何用c语言实现

sip协议如何用C语言实现

用纯C代码编写一个简单的HTTP客户端向服务器请求数据

如何用C语言打开网站?

学习抓包之如何用Charles实现“刷楼”