通過Socket實現簡單web服務器功能(接收頁面請求信息)不使用Tomcat!

通過Socket來實現對http請求信息的獲取。本人小白,有錯誤希望大家及時指出。

本項目的運行方式:運行Luancher,然後在瀏覽器通過網址訪問:http:/localhost:7777.這裏的端口號是和Luancher類中的參數一直,是一直監視的那個端口。url中也可以添加參數,以?連接的格式,代碼運行過,可以直接使用。

package com.lei.second;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class HttpServer implements Runnable {
	//服務器監聽
	private ServerSocket serverSocket;
	//標誌位,標識當前服務器是否正在運行
	private boolean isRunning;
	public HttpServer(int port) {
		try {
			serverSocket = new ServerSocket(port);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public void stop() {
		this.isRunning = false;
	}
	
	public void start() {
		this.isRunning = true;
		new Thread(this).start();
	}
	
	@Override
	public void run() {
		while (isRunning) {	//一直監聽,知道收到停止的命令
			Socket socket = null;
			try {
				socket = serverSocket.accept();	//如果沒有請求,會在這裏等待,有客戶端請求的時候纔會繼續往下執行

				BufferedReader bufferedReader = new BufferedReader(
						new InputStreamReader(socket.getInputStream()));	//獲取輸入流
				StringBuilder stringBuilder = new StringBuilder();
				String line = null;
				while ((line = bufferedReader.readLine())!=null
						&&!line.equals("")) {
					stringBuilder.append(line).append("/n");
				}
				String record = stringBuilder.toString();
				System.out.println("--------------------------------");
				System.out.println(record);
				PrintWriter printWriter = new PrintWriter(
						socket.getOutputStream(),true);	//自動刷新緩存
				doEcho(printWriter, record); 	//將日誌輸出到瀏覽器
				printWriter.close();
				bufferedReader.close();
				socket.close();
			} catch (IOException e) {
				e.printStackTrace();
			}	
		}
	}
	
	/*
	 * 講收到的信回寫給客戶端
	 */
	private void doEcho(PrintWriter printWriter, String record) {
		printWriter.write("已接受數據");
	}
}

package com.lei.second;

public class Luancher {
	public static void main(String[] args) {
		HttpServer httpServer = new HttpServer(7777);
		httpServer.start();
	}
}


運行後會在控制檯寫出協議內容,我們可以再根據自己所需要的部分,進行截取。


這裏我讓頁面重寫了協議內容,當然也可以返回其他數值,這裏是模擬數據從服務端的響應。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章