广告
返回顶部
首页 > 资讯 > 服务器 >在java项目中使用 Socket如何实现模拟一个HTTP服务器
  • 633
分享到

在java项目中使用 Socket如何实现模拟一个HTTP服务器

javasockethttp 2023-05-31 15:05:27 633人浏览 安东尼
摘要

这篇文章给大家介绍在java项目中使用 Socket如何实现模拟一个Http服务器,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。HTTP基于tcp协议,协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请

这篇文章给大家介绍在java项目中使用 Socket如何实现模拟一个Http服务器,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

HTTP基于tcp协议,协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URL、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,响应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容

在java项目中使用 Socket如何实现模拟一个HTTP服务器

具体字段这里不作解释,不懂的请先自己了解http协议。这里主要是根据请求响应这一过程模拟HTTP服务器。

下面是代码:

package com.example.httpserver;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;public class HttpServer {  private static final Integer port = 80;//HTTP默认端口80  public static void main(String[] args) {    ServerSocket serverSocket;    try {      //建立服务器Socket,监听客户端请求      serverSocket = new ServerSocket(port);      System.out.println("Server is running on port:"+serverSocket.getLocalPort());      //死循环不间断监听客户端请求      while(true){        final Socket socket = serverSocket.accept();        System.out.println("biuld a new tcp link with client,the cient address:"+             socket.getInetAddress()+":"+socket.getPort());        //并发处理HTTP客户端请求        service(socket);      }    } catch (IOException e) {      e.printStackTrace();    }  }  public static void service(Socket socket)  {    new Thread(){      public void run(){        InputStream inSocket;        try {          //获取HTTP请求头          inSocket = socket.getInputStream();          int size = inSocket.available();          byte[] buffer = new byte[size];          inSocket.read(buffer);          String request = new String(buffer);          System.out.println("ClientBrowser:\n"+request+"\n"              + "------------------------------------------------------------------");          String firstLineOfRequest = "";          String[] heads;          String uri = "/index.html";          String contentType ="";          if(request.length() > 0){            firstLineOfRequest = request.substring(0,request.indexOf("\r\n"));            heads = firstLineOfRequest.split(" ");            uri = heads[1];            if(uri.indexOf("html") != -1){              contentType = "text/html";            }else{              contentType = "application/octet-stream";            }          }          //将响应头发送给客户端          String responseFirstLine = "HTTP/1.1 200 OK\r\n";          String responseHead = "Content-Type:" + contentType +"\r\n";          OutputStream outSocket = socket.getOutputStream();          System.out.println("ServerResponse:\n"+responseFirstLine+"\n"+responseHead+"\n"              + "--------------------------------------------------------------------");          outSocket.write(responseFirstLine.getBytes());          outSocket.write(responseHead.getBytes());          //通过HTTP请求中的uri读取相应文件发送给客户端          FileInputStream writehtml = new FileInputStream(new File("wwwroot"+uri));          outSocket.write("\r\n".getBytes());           byte[] htmlbuffer = new byte[writehtml.available()];          if(writehtml !=null){            int len = 0;            System.out.println("writeHtml");            while((len = writehtml.read(htmlbuffer)) != -1){              outSocket.write(htmlbuffer, 0,len);            }          }          outSocket.close();          socket.close();        } catch (IOException e) {          e.printStackTrace();        }      }    }.start();  }}

--结束END--

本文标题: 在java项目中使用 Socket如何实现模拟一个HTTP服务器

本文链接: https://www.lsjlt.com/news/226407.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作