通过Socket实现简单web服务器功能(接收页面请求信息)不使用Tomcat!

xiaoxiao2021-02-28  52

通过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(); } }

运行后会在控制台写出协议内容,我们可以再根据自己所需要的部分,进行截取。

这里我让页面重写了协议内容,当然也可以返回其他数值,这里是模拟数据从服务端的响应。

转载请注明原文地址: https://www.6miu.com/read-81544.html

最新回复(0)