簡單的web伺服器實現視訊播放
2,TomDog 山寨web伺服器 http://edu.51cto.com/index.php?do=lession&id=16295 根據51cto上面講得來做,很不錯,老師講得很細緻,原來以為很難得東西分分鐘就搞定了,思路很清晰,程式碼運用很熟練。我在他的基礎上做了一點點完善。
web伺服器我的理解就是部署在網站伺服器上,與瀏覽器互動的一組程式,最近學習了一下51job上的一個視訊,仿照tomcat寫的一個簡單的web伺服器。
先來羅列一下用java寫web伺服器需要的知識點。
1,伺服器與客戶端通訊,socket。其中伺服器端是serversocket
2,伺服器需要同時處理多個瀏覽器的請求,所以需要用到多執行緒 3,如何相應請求,io操作 4,一些web基礎,請求頭,html等下面介紹下程式碼: TomDog類: main()函式,引數可指定埠號,啟動start。 start函式,啟動對應埠號,監聽socket請求,建立執行緒池處理
HandlerRquestThread類: 實現runnable介面(執行緒)定義網站根目錄。 建構函式,拿到socket,處理得到輸入和輸出流in/out paresRequestHead(),處理請求頭,獲得請求檔案,並返回 getFile,列印目標檔案,即找到相應檔案轉向輸出流 Dirshow,用於羅列目錄,可以404禁止 sendError(),傳送錯誤資訊 run(),執行緒函式題,呼叫上面函式拿到檔案命,並把檔案輸出到輸出流。
難點是需要基礎足夠紮實,執行緒,io這裡很重要。 [java]
- package duola;
- import java.io.IOException;
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- /*
- * 1,多個瀏覽器同時訪問(多執行緒)
- * 2.如何提供服務(socket)
- * 3,如何返回響應(IO)
- * 山寨web伺服器
- */
- public class TomDog {
- private static int PORT = 8080;
- public static void main(String[] args){
- /*
- * 通過命令列設定埠
- */
- int p = (args.length > 0)?Integer.parseInt(args[0]):PORT;
- new TomDog().start(p);
- }
- /*
- * 服務啟動方法
- * 建立socket伺服器
- */
- public void start(int port){
- try{
- ServerSocket ss = new ServerSocket(port);
- System.out.println("----------------監聽[" + port + "]埠的伺服器啟動----------------");
- while(true){
- Socket socket = ss.accept();
- System.out.println("-------------有客戶端請求------------");
- //new Thread(new HandlerRquestThread(socket));//執行緒的方法,效率一般
- /*
- * 建立向城池,將任務提交給執行緒池去處理
- */
- ExecutorService pool = Executors.newFixedThreadPool(100);//執行緒池,預計100個同時來
- pool.submit(new HandlerRquestThread(socket));//有人來,就從池子裡面取出一個執行緒
- }
- }catch(IOException e){
- e.printStackTrace();
- }
- }
- }
[java] view plain copy
- package duola;
- import java.io.BufferedInputStream;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.PrintStream;
- import java.net.Socket;
- import java.net.URLDecoder;
- /*
- * 專門處理不同的客戶端請求的多執行緒類
- */
- public class HandlerRquestThread implements Runnable{
- private InputStream in = null;
- //因為混色機瀏覽器內容的輸出,所以使用了printStream 標準輸出流
- private PrintStream out = null;
- public static final String WEB_ROOT = "H:"+File.separator+"AppServ"+File.separator+"www"+File.separator;
- public static final boolean DirShow = true;//是否允許列出目錄檔案
- /*
- * 通過構造器獲得Socket
- * 並通過Socket獲取對客戶端的輸入和輸出流
- */
- public HandlerRquestThread(Socket socket){
- try {
- in = socket.getInputStream();
- out = new PrintStream(socket.getOutputStream());
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- /*
- * 解析請求頭,獲得客戶端請求的資源名稱
- * in 輸入流
- * return 請求的資源名稱
- */
- public String parseRequestHead(InputStream in) throws IOException{
- //客戶端發起請求會將一些請求資料包含在請求頭中
- BufferedReader br = new BufferedReader(new InputStreamReader(in));
- //請求頭的第一行將包含請求的方式,資源,協議
- String headContent = br.readLine();
- String[] heads = headContent.split(" ");//空格分割成陣列
- System.out.println("解析請求頭:");
- System.out.println(headContent);
- if(heads[1].equals("/"))
- heads[1] = heads[1]+"index.html";
- return heads[1];
- }
- public void getFile(String fileName) throws IOException{
- File file = new File(WEB_ROOT+fileName);
- System.out.println("傳送檔案:");
- System.out.println(file.toString());
- if(!file.exists()){
- //System.out.println("不存在");
- sendError("404", "您請求的資源["+fileName+"]不存在!");
- }else if(file.isDirectory()){
- File temp = new File(WEB_ROOT+fileName+File.separator+"index.html");
- if(temp.exists()){ //首頁存在,顯示首頁
- getFile(fileName+File.separator+"index.html");
- }else if(DirShow){
- // if(fileName.endsWith("/")){
- // //如果檔案不以/結尾,檔案超連結不會以file為當前目錄,而是結尾有/的,本來想用301重定向,後來用../file/搞定了
- // Dirshow(file);
- // }
- Dirshow(file);
- }else
- sendError("403", "403 Forbidden");
- }else{
- //FileInputStream fis = new FileInputStream(file);
- BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
- byte[] buff = new byte[(int)file.length()];
- int len = bis.read(buff);
- out.println("HTTP/1.1 200 OK");
-
相關推薦
簡單的web伺服器實現視訊播放
準備寫一個web伺服器專門供宿舍看電影用。 之前已經實現基本的web伺服器,今天又把視訊播放器弄好了,接下來就是整合了。 視訊播放器,用的CuPlayer,改改demo就行,之前不成功可能是沒在localhost下測試,視訊是需要伺服器提供檔案傳輸服務的。
H5簡單實現視訊播放歷史定位
html <video id="Video" controls autoplay controlsList="nodownload"> </video> js $('#Video').on("loadedmetadata", fu
go語言實現的簡單web伺服器
go語言讓web伺服器實現和部署變得異常簡潔.終於可以拋開亂七八糟的專案結構和體積龐大的IDE,一窺其基本原理. 首先是一個簡單的伺服器實現程式碼,如果是GET請求,則回送一條This is a GET request訊息,如果是POST請求,則解析POST請
自己開發簡單web伺服器一(C++開源庫websocketpp實現)
簡要 Web伺服器主要處理的是HTTP請求(這裡忽略HTTPS),HTTP協議建立在TCP上。如果自己實現,無非就是網路程式設計(socket接受、傳送),資料解析(HTTP欄位解析),返回HTTP協議字串給客戶端等。說起來簡單,要做到跨平臺和高效,不得不介紹幾個有名的開源
一個簡單web伺服器的java實現
一個簡單的web伺服器在不考慮其效能及健壯性的情況下,通常只需實現的功能包括伺服器的啟動,它用於監聽某一個埠,接收客戶端發來的請求,並將響應結果返回給客戶端。本文將介紹一個簡單web伺服器的實現原理,它本身只能處理某個目錄下的靜態資原始檔(文字、圖片等)。採用java
python uwsgi實現的簡單web伺服器(8程式碼)
python uwsgi實現的簡單web伺服器,一共用了8行程式碼。 先說一下web領域的幾個概念,主要是舉例: web伺服器:apache、iis、nginx等。 web應用伺服器:tomcat、
fairyGUI簡單實現視訊播放
1.fairyGUI;裡建立一個轉載器,匯出資源包到unity 2.將視訊轉為ogv格式放至resource資料夾下 這種方式支援的視訊格式較少比較簡便。 第二種 用3D模型Quad載入到fairyGUI的圖形控制元件上 視訊載入方式相同,只是載入到了模型的材質球上
自己開發簡單web伺服器二(Node.js實現)
Node.js 剛接觸Node.js沒多久,試用了一下,輕輕鬆鬆幾行程式碼就可以實現一個簡單的HTTP伺服器,開發起來的確比其他語言快多了。 Node.js是一個開源的JavaScript庫,可以跨平臺執行在Windows、Linux、Mac上。JS解析庫用的是大名鼎鼎的G
一個簡單的靜態web伺服器實現
看完tomcat原理後,想自己用java仿一個簡單的tomcat,先實現一個靜態的web伺服器。需要的技術有java網路程式設計(tcp/ip協議、http協議、socket等基礎知識) 原始碼下載連
利用xinetd實現簡單web伺服器(映象站)
瀏覽效果: linux伺服器安裝xinetd後,在/etc/xinetd.d/目錄下建立xhttpd檔案,並輸入內容: service xhttpd { socket_type = stream protocol = tcp wait = no
c語言實現簡單web伺服器
浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>
MicroPython TPYBoard v201 簡單的web伺服器實現過程
前言 TPYBoard v201開發板上搭載了乙太網轉TTL串列埠模組(USR-K2),從而實現了TCP通訊的功能。既然可以T
簡單HTTP伺服器實現
我們這裡實現一個簡單的HTTP伺服器,無論瀏覽器向我們請求什麼資料,我們都返回一個hello world //實現最簡單的http服務端程式 //返回hello world //http是應用協議,在傳輸層使用的是tcp協議所
ExtJS實現視訊播放功能以及設定視訊播放起始時間呼叫mediaplayer
ExtJS在語法上用起來和JS還是有一定區別,初始用起來很不習慣,但總起來說還是把視訊播放的功能做出來了,分享出來,以供參考。 使用ExtJS呼叫mediaplayer其實還是用的<embed>標籤或者使用<object></object>標籤,在我參考不少文
android,Exoplayer實現視訊播放器
bundle配置: implementation 'com.google.android.exoplayer:exoplayer-core:2.8.1'implementation 'com.google.android.exoplayer:exoplayer-dash:2.8.1'implementati
qt實現視訊播放器
本篇部落格介紹如何利用qMediaPlayer和qvideowidget實現視訊檔案(avi,mp4....)的播放,並且提供進度顯示,還可以通過拖動進度條來變換播放位置。相關程式碼可以在我的資源裡下載"基於qt的視訊播放器" pro檔案: #------------------------
用video.js和windows自帶播放外掛MediaPlayer實現視訊播放
由於本人在搜尋資料沒有找到video.js外掛支援ie8的方法,所以在做檢視視訊的功能時想法是這樣的,對於谷歌和IE10以上用video.js的方法實現,而IE9及IE8用MediaPlayer實現。下面是實現程式碼(只測試過mp4格式的): 1.video.js實現 &
go搭建一個簡單web伺服器
Go語言裡面提供了一個完善的net/http包,通過http包可以很 方便的就搭建起來一個可以執行的web服務。同時使用這個包能很簡單地對web的路由,靜態檔案,模版,cookie等數 據進行設定和操
使用poco庫搭建簡單http伺服器實現hello world
原始碼例子如下: #include "Poco/Net/HTTPServer.h" #include "Poco/Net/HTTPRequestHandler.h" #include "Poco/Net/HTTPRequestHandlerFactory.h" #incl
android客戶端+JAVA WEB伺服器實現json資料解析
import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.But