1. 程式人生 > >Linux下簡易web伺服器實現

Linux下簡易web伺服器實現

今天突然對http的web伺服器感興趣了,就研究了一下,發現linux下的web伺服器就是一個socket程式設計的伺服器端,而我們用的ie,chrome等瀏覽器就是客戶端,只不過傳送和接收資料按照http網頁格式,就相當於對資料進行了封裝,相當於加上了檔案頭和檔案尾等一些規定的東西罷了。下面有一個簡單的web伺服器程式,網上找的,用了,感覺不錯,分享一下。

當今很多http協議的伺服器已經成熟化比如apache iis nginx 想想這些執行在伺服器上的程式,利用tcp原理進行http協議的頁面元素傳輸,這裡有個簡易原理程式。

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <string.h>
 
main()
{
    int sk1,sk2;
    int len = 0;
    char buff[4096];
    struct sockaddr_in cli_addr;
    char msgret[4096];
    memset( msgret, 0x00, sizeof(msgret) );
 
    if( (sk1=socket(AF_INET, SOCK_STREAM, 0)) < 0 )
    printf( "socket failed\n" );
    printf( "creat socket success: %d\n", sk1 );
 
    struct sockaddr_in sa;
    memset( &sa, 0x00, sizeof(sa) );
    sa.sin_family = AF_INET;
    sa.sin_addr.s_addr = inet_addr( "192.168.0.111" );//伺服器的ip地址,這裡必須和你的電腦的相同
    sa.sin_port = htons( 13800 );//埠號

    if( bind(sk1, (struct sockaddr*)&sa, sizeof(sa)) < 0 )
    printf( "bind socket failed\n" );
 
    listen( sk1, 100 );
 
    while( 1 )
    {
        len = sizeof(cli_addr);
        sk2 = accept( sk1, (struct sockaddr*)&sa, (socklen_t*)&len );
        if( sk2 < 0 )
            printf( "create accept socket failed\n" );
        else
        {
            printf( "accept socket: %d\n", sk2 );
            memset( buff, 0x00, sizeof(buff) );
            len = read( sk2, buff, 4096);
            printf( "msg recv: %s\n", buff );
            sprintf( msgret, "HTTP/1.1 200 OK\n"
                             "Date: Fri, 02 Mar 2012 01:59:03 GMT\n"
                             "Server: Apache"
                             "Location: http://www.sina.com.cn/\n"
                             "Cache-Control: max-age=60\n"
                             "Expires: Fri, 02 Mar 2012 02:00:03 GMT\n"
                             "Vary: Accept-Encoding\n"
                             "Content-Length: 231\n"
                             "Content-Type: text/html; charset=iso-8859-1\n"
                             "X-Cache: MISS from xd33-82.HP08040021.sina.com.cn\n"
                             "Connection: close\n\n"
                             "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n"
                             "<html><head>\n"
                             "<title>title test</title>\n"
                             "</head><body>\n"
                             "<h1>test body</h1>\n"
                             "<p>Hello,I am web server!</p>\n"//列印的文字內容
                             "</body></html>" );
            len = send( sk2, msgret, sizeof(msgret), 0 );
            if( len <= 0 )
            {
                printf( "send failed\n" );
            }
        }
    }
}
訪問web伺服器就相當於用客戶端即瀏覽器採用http協議連線訪問伺服器端,我們看到網頁就相當於伺服器端將本地的網頁檔案傳送到你的電腦,你的電腦瀏覽器作為客戶端將網頁顯示出來!

在瀏覽器執行結果如圖所示


相關推薦

Linux簡易web伺服器實現

今天突然對http的web伺服器感興趣了,就研究了一下,發現linux下的web伺服器就是一個socket程式設計的伺服器端,而我們用的ie,chrome等瀏覽器就是客戶端,只不過傳送和接收資料按照http網頁格式,就相當於對資料進行了封裝,相當於加上了檔案頭和檔案

linuxdns主從伺服器實現

案例環境: 主域名伺服器:ns1.zdj.com,172.17.0.142 從域名伺服器:ns2.zdj.com,172.17.0.37 兩臺伺服器均能夠提供 zdj.com 區域的域名解析主域名伺服

LinuxTCP網路伺服器實現原始碼

大家都知道各類網路伺服器程式的編寫步驟,並且都知道網路伺服器就兩大類:迴圈服務和併發服務。這裡附上原始碼來個小結吧。 首先,迴圈網路伺服器程式設計實現的步驟是這樣的: 這種伺服器模型是典型迴圈服務,如果不加上多程序/執行緒技術,此種服務吞吐量有限,大家都可以看到,如果前一

Linux網路socket程式設計——實現伺服器(select)與多個客戶端通訊

Linux下網路socket程式設計——實現伺服器(select)與多個客戶端通訊 置頂 2017年06月23日 14:44:37 閱讀數:3225 標籤: socket程式設計伺服器與多個客戶端通epoll多路複用C語言網路程式設計 更多

linux搭建web和ftp伺服器

開啟終端,安裝vsftpd(sudo apt-get install vstfpd)。service vsftpd start開啟ftp,stop關閉ftp。 在瀏覽器開啟ftp://ftp主機ip地址//就能訪問ftp伺服器了 搭建簡易web框架 安裝apache sudo ap

vmware環境linux中建立web伺服器

① 檢查是否安裝www伺服器對應的rpm軟體    rpm -qa | grep httpd ② 如果沒有安裝軟體,那麼就要重新安裝,rpm軟體一般在第一或者第二張系統盤中 rpm -ivh 軟體名 ③ 如果安裝成功,那麼就對主配置檔案httpd.conf進行配置,主配置

Linux安裝Tomcat伺服器和部署Web應用

一、上傳Tomcat伺服器 二、安裝Tomcat伺服器 2.1、解壓tomcat伺服器壓縮包 2.2、配置環境變數   tomcat伺服器執行時是需要JDK支援的,所以必須配置好JDK用到的那些環境變數         編輯/etc下的profile檔案,加上如下內容:       2.3、修改t

linux構建svn伺服器實現專案自動部署

在Linux系統中搭建svn服務所需要用到的軟體叫做subversion,可以通過yum來進行安裝. svn服務是為了實現協同工作,即一個團隊公眾開發一個專案而不導致程式碼混亂,不會出現今天我修改的程式碼在不通知同事的情況下又被他修改了.

linuxsocket程式設計 select實現非阻塞模式多臺客戶端與伺服器通訊

select函式原型如下: int select (int maxfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); select系統呼叫是用來讓我們的程式

Linux使用libevent庫實現伺服器端程式設計

一、背景 TCP伺服器端一般用到非阻塞Socket、IO複用,Linux可以支援epoll、select,而Windows支援select、IOCP,考慮平臺適用性,需要對IO事件進行封裝相容; 二、相關知識 2.1 事件驅動(I/O複用) 服務端常用到的 select

Linux簡易進度條的實現【轉】

在生活中,進度條是很常見的,那麼,進度條是如何實現的呢?   首先,進度條的動態是利用人眼視覺暫留效果的。實際上是如下過程: 先輸出:[=                                               ]表示進度是1%,重新整理之後 再

linux使用C語言實現簡易的學生資訊管理系統

該專案資料儲存方式使用的是動態陣列,所以需要用到動態陣列庫,具體庫檔案參考->我的動態陣列庫<-上的兩個檔案 ArrayLib.h 和 ArrayLib.c 學生管理系統的檔案有三個 main.c、stuSystem.h 和 stuSystem.c,

linux 安裝web開發環境

技術 cnblogs -- 時間日誌 java inux 協議 環境變量 含義 以下使用 linux centos系統 一、JDK的安裝 1、下載jdk-8u111-linux-x64.tar.gz 2、解壓該文件,將解壓後的文件復制到 /usr/local/jdk1.7

Linuxmysql基於MyCat實現主從復制和讀寫分離

mycat1.1 MyCat介紹及應用場景MyCat介紹MyCat是一個開源的分布式數據庫系統,是一個實現了MySQL協議的服務器,前端用戶可以把它看作是一個數據庫代理,用MySQL客戶端工具和命令行訪問,而其後端可以用MySQL原生協議與多個MySQL服務器通信,也可以用JDBC協議與大多數主流數據庫服務器

LinuxWi-Fi的實現:wireless_tools和wpa_supplicant

erl 密碼 fig 而是 tar.gz 方式 控制 nec dbm 轉載於:https://www.cnblogs.com/lidabo/p/6069455.html 平臺為hi35XX,在Liunx下借助wireless_tools和wpa_supplicant(因為現

linux設定web服務tomcat記憶體

  linux下設定web服務tomcat記憶體 一,java.lang.OutOfMemoryError: Java heap space  JVM堆的設定是指java程式執行過程中JVM可以調配使用的記憶體空間的設定.JVM在啟動的時候會自動設定Heap siz

使用XShell 6在Linux上部署web伺服器——java環境的配置

一、需要用到的軟體及下載連結        1、XShell 6  下載地址: https://www.netsarang.com/download/down_xsh6.html?        

簡單的web伺服器實現視訊播放

準備寫一個web伺服器專門供宿舍看電影用。 之前已經實現基本的web伺服器,今天又把視訊播放器弄好了,接下來就是整合了。 視訊播放器,用的CuPlayer,改改demo就行,之前不成功可能是沒在localhost下測試,視訊是需要伺服器提供檔案傳輸服務的。

web應用和mysql都部署到linuxweb應用通過jdbc就無法獲取到mysql連線。

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested

如何在linux安裝tomcat伺服器

linux作為現在比較主流的伺服器作業系統,使用的機器廣泛,安全穩定。tomcat作為應用容器當然可以有linux版本的tomcat。在linux上安裝tomcat的方式也很簡單,只需要執行指令碼基本配置即可。小編今天介紹下如何在linux下安裝tomcat伺服器