通過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();
}
}
運行後會在控制檯寫出協議內容,我們可以再根據自己所需要的部分,進行截取。
這裏我讓頁面重寫了協議內容,當然也可以返回其他數值,這裏是模擬數據從服務端的響應。