日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

最简单的http服务器实现

發(fā)布時間:2025/5/22 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 最简单的http服务器实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

現(xiàn)在有很多功能強大的http服務(wù)器,APACHE,IIS我們應(yīng)該都很熟悉

其實眾多的http服務(wù)器都有個最基本的工作流程:

1.初始化工作環(huán)境,在固定端口(80)偵聽外部請求

2.接收請求

3.建立連接

4.發(fā)送響應(yīng)頭部

5.發(fā)送響應(yīng)內(nèi)容

6.中斷連接

下面是個最簡單的http服務(wù)器的例子,用winsock實現(xiàn)

為什么是最簡單的呢,因為它接收到請求后,發(fā)送的響應(yīng)頭部和響應(yīng)內(nèi)容都是直接指定的

不能區(qū)別不同的get,post,head 請求。

#include "winsock.h"
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#pragma comment (lib,"wsock32")///所需的庫文件

void main()
{
?/初始化winsock環(huán)境
?WSADATA wsadata;
?WORD wVersion=MAKEWORD(2,0);/winsock 2.0
?if(WSAStartup(wVersion,&wsadata)!=0)
?{
??printf("initalize failed!\n");
??WSACleanup();
??exit(1);
?}


?
?int sock,csock,length;//sock是服務(wù)器端偵聽套接字,csock是客戶端連接套接字
?length=sizeof(struct sockaddr);


?struct sockaddr_in server_ipaddr,client_ipaddr;//用來獲得服務(wù)器和客戶端的地址信息
?memset(&server_ipaddr,0,length);
?server_ipaddr.sin_family=AF_INET;
?server_ipaddr.sin_port=htons(80);
?server_ipaddr.sin_addr.s_addr=inet_addr("211.81.55.200");


?char buff[4096];int nbuff;

?sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
///綁定
?if(bind(sock,(struct sockaddr *)&server_ipaddr,length)==SOCKET_ERROR)
?{
??printf("Bind error\n");
??WSACleanup();
??exit(1);
?}
偵聽
?if(listen(sock,5)==SOCKET_ERROR)
?{
??printf("Listen error\n");
??WSACleanup();
??exit(1);
?}

?/
?char headers[1000];//保存頭部
?/頭部格式
?char hdrFmt[]=
??"HTTP/1.0 200 OK\r\n"
??"Server: MySocket Server\r\n"
??"Date: %s\r\n"
??"Content-Type: text/html\r\n"
??"Accept-Ranges: bytes\r\n"
??"Content-Length: %d\r\n\r\n";
?char * strGmtNow="08/15/14 22:53:00 GMT";///隨便指定了一個時間
?wsprintf(headers, hdrFmt, (const char*) strGmtNow, strlen(CustomHtml));
?//要傳送的網(wǎng)頁內(nèi)容
?char CustomHtml[]=
??"<html>\r\n"
??"<head>\r\n"
??"<title></title>\r\n"
??"</head>\r\n"
??"<body>\r\n"
??"<p align=\"center\">歡迎訪問我的主頁</p>\r\n"
??"<h3 align=\"center\"><a href=\"Default.htm\">快樂天地</a></h3>\r\n"
??"<p>結(jié)束</p>\r\n"
??"<p> </p>\r\n"
??"</body></html>\r\n\r\n";
?

?

?//
?while(1)
?{
??//偵聽到連接后,產(chǎn)生新的套接字
??///用來和客戶端傳遞消息
??csock=accept(sock,(struct sockaddr *)&client_ipaddr,&length);
??if(csock==SOCKET_ERROR)
??{
???printf("Listen error\n");
???WSACleanup();
???exit(1);
??}
??nbuff=recv(csock,buff,4095,0);
???buff[nbuff]='\0';
??printf("%s",buff);
?/發(fā)送響應(yīng)頭部
??send(csock,headers,strlen(headers),0);
?/發(fā)送內(nèi)容?
??send(csock,CustomHtml,strlen(CustomHtml),0);
?/關(guān)閉本次連接
??closesocket(csock);

?


?}

?

}

轉(zhuǎn)載于:https://www.cnblogs.com/MaxWoods/archive/2010/02/02/1661445.html

總結(jié)

以上是生活随笔為你收集整理的最简单的http服务器实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。