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" ); } } } }
在瀏覽器執行結果如圖所示
相關推薦
Linux下簡易web伺服器實現
今天突然對http的web伺服器感興趣了,就研究了一下,發現linux下的web伺服器就是一個socket程式設計的伺服器端,而我們用的ie,chrome等瀏覽器就是客戶端,只不過傳送和接收資料按照http網頁格式,就相當於對資料進行了封裝,相當於加上了檔案頭和檔案
linux下dns主從伺服器實現
案例環境: 主域名伺服器:ns1.zdj.com,172.17.0.142 從域名伺服器:ns2.zdj.com,172.17.0.37 兩臺伺服器均能夠提供 zdj.com 區域的域名解析主域名伺服
Linux下TCP網路伺服器實現原始碼
大家都知道各類網路伺服器程式的編寫步驟,並且都知道網路伺服器就兩大類:迴圈服務和併發服務。這裡附上原始碼來個小結吧。 首先,迴圈網路伺服器程式設計實現的步驟是這樣的: 這種伺服器模型是典型迴圈服務,如果不加上多程序/執行緒技術,此種服務吞吐量有限,大家都可以看到,如果前一
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服務是為了實現協同工作,即一個團隊公眾開發一個專案而不導致程式碼混亂,不會出現今天我修改的程式碼在不通知同事的情況下又被他修改了.
linux下socket程式設計 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
Linux下mysql基於MyCat實現主從復制和讀寫分離
mycat1.1 MyCat介紹及應用場景MyCat介紹MyCat是一個開源的分布式數據庫系統,是一個實現了MySQL協議的服務器,前端用戶可以把它看作是一個數據庫代理,用MySQL客戶端工具和命令行訪問,而其後端可以用MySQL原生協議與多個MySQL服務器通信,也可以用JDBC協議與大多數主流數據庫服務器
Linux下Wi-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都部署到linux下,web應用通過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伺服器