麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Java > 正文

java使用socket實現一個多線程web服務器的方法

2024-07-14 08:42:35
字體:
來源:轉載
供稿:網友

除了服務器類,還包括請求類和響應類

請求類:獲取客戶的HTTP請求,分析客戶所需要的文件

響應類:獲得用戶請求后將用戶需要的文件讀出,添加上HTTP應答頭。發送給客戶端。

服務器處理類

package com.lp.app.webserver;import java.io.*;import java.net.*;//使用Socket創建一個WEB服務器,本程序是多線程系統以提高反應速度。class WebServer{ public static String WEBROOT = "";//默認目錄 public static String defaultPage = "index.htm";//默認文件 public static void main (String [] args) throws IOException { System.out.println ("服務器啟動.../n");  //使用8080端口提供服務 ServerSocket server = new ServerSocket (8080); while (true) {  //阻塞,直到有客戶連接  Socket sk = server.accept ();  System.out.println ("Accepting Connection.../n");  //啟動服務線程  new WebThread (sk).start (); } }}//使用線程,為多個客戶端服務class WebThread extends Thread{ private Socket sk; WebThread (Socket sk) {  this.sk = sk; } //線程體 public void run () {  InputStream in = null;  OutputStream out = null;  try{  in = sk.getInputStream();  out = sk.getOutputStream();  //接收來自客戶端的請求。  Request rq = new Request(in);  //解析客戶請求  String sURL = rq.parse();  System.out.println("sURL="+sURL);  if(sURL.equals("/"))    sURL = WebServer.defaultPage;  Response rp = new Response(out);  rp.Send(sURL);   }  catch (IOException e)  {  System.out.println (e.toString ());  }  finally  {  System.out.println ("關閉連接.../n");  //最后釋放資源  try{   if (in != null)   in.close ();   if (out != null)   out.close ();   if (sk != null)   sk.close ();  }  catch (IOException e)  {  }  } }}

請求類

package com.lp.app.webserver;import java.io.*;import java.net.*;//獲取客戶的HTTP請求,分析客戶所需要的文件public class Request{ InputStream in = null; //獲得輸入流。這是客戶的請求數據。 public Request(InputStream input){ this.in = input; } //解析客戶的請求 public String parse() { //從Socket讀取一組數據 StringBuffer requestStr = new StringBuffer(2048); int i; byte[] buffer = new byte[2048]; try { i = in.read(buffer); } catch (IOException e) { e.printStackTrace(); i = -1; } for (int j=0; j<i; j++) { requestStr.append((char) buffer[j]); } System.out.print(requestStr.toString()); return getUri(requestStr.toString()); } //獲取URI信息字符 private String getUri(String requestString) { int index1, index2; index1 = requestString.indexOf(' '); if (index1 != -1) { index2 = requestString.indexOf(' ', index1 + 1); if (index2 > index1)  return requestString.substring(index1 + 1, index2); } return null; }}

響應類

package com.lp.app.webserver;import java.io.*;import java.net.*;//獲得用戶請求后將用戶需要的文件讀出,添加上HTTP應答頭。發送給客戶端。public class Response{ OutputStream out = null; //發送請求的文件 public void Send(String ref) throws IOException { byte[] bytes = new byte[2048]; FileInputStream fis = null; try { //構造文件 File file = new File(WebServer.WEBROOT, ref); if (file.exists()) {  //構造輸入文件流  fis = new FileInputStream(file);  int ch = fis.read(bytes, 0, 2048);  //讀取文件  String sBody = new String(bytes,0);  //構造輸出信息  String sendMessage = "HTTP/1.1 200 OK/r/n" +  "Content-Type: text/html/r/n" +  "Content-Length: "+ch+"/r/n" +  "/r/n" +sBody;  //輸出文件  out.write(sendMessage.getBytes()); }else {  // 找不到文件  String errorMessage = "HTTP/1.1 404 File Not Found/r/n" +  "Content-Type: text/html/r/n" +  "Content-Length: 23/r/n" +  "/r/n" +  "<h1>File Not Found</h1>";  out.write(errorMessage.getBytes()); } } catch (Exception e) { // 如不能實例化File對象,拋出異常。 System.out.println(e.toString() ); } finally { if (fis != null)  fis.close(); } } //獲取輸出流 public Response(OutputStream output) { this.out = output;}}

以上這篇java使用socket實現一個多線程web服務器的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久亚洲精品11p | 暴力强行进如hdxxx | 国产一区精品视频 | 久久久经典视频 | 久久久成人免费视频 | 海外中文字幕在线观看 | 精品国产观看 | 一本色道久久久888 国产一国产精品一级毛片 国产精品高潮视频 | 国产日韩线路一线路二 | 99seav | 狠狠色噜噜狠狠狠米奇9999 | 免费一级欧美大片视频在线 | 欧美激情在线播放 | 全免费午夜一级毛片真人 | 黄色免费高清网站 | av播放在线 | av电影网站在线 | 欧美日韩高清一区 | 色阁阁69婷婷 | 最新中文在线视频 | 成人nv在线观看 | 欧美成人高清视频 | 免费亚洲视频在线观看 | 午夜视频大全 | 国产伦久视频免费观看视频 | 日本在线一区二区 | 黄a大片 | 久久综合网址 | 国产精品麻豆91 | 亚州成人在线观看 | 亚洲一级簧片 | 欧美成人二区 | 日本在线播放一区二区三区 | 免费黄网站在线播放 | 免费国产成人高清在线看软件 | 激情在线观看视频 | 亚洲精品成人18久久久久 | 国产分类视频 | 成人黄视频在线观看 | 国产成人精品区 | 成人综合在线观看 |