Java实现http协议 您所在的位置:网站首页 gossip协议java实现 Java实现http协议

Java实现http协议

2024-03-04 02:27| 来源: 网络整理| 查看: 265

1.http协议

 http协议是一种用于在网络设备两端传输超文本的协议    此协议分为客户端和服务端    在详细了解此协议之前,我们要清楚     1.客户端一般是指运行在网络设备上的浏览器     2.服务端是提供内容服务的服务器软件    我们来看一下当客户端向服务端发送的请求报文头 在这里插入图片描述    这个是由客户端(浏览器)自动构造发送给服务端的

   接下来是服务端向客户端的发送的回应报文头 在这里插入图片描述 这不是一个最简单的回应报文头,最简单的回应报文头其实只包含 HTTP/1.1 Transfer-Encoding: Content-Type: text/html;charset=UTF-8 data 即可。 接下来我们就用java来模拟一下http在服务器上的体现。 在此之前要先说明的是我的网络拓扑图,以便在运行时更好的讲解 在这里插入图片描述

package protocols.http; import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.text.DateFormat; import java.text.SimpleDateFormat; public class service { public static void main(String args[]) { try { ServerSocket serverSocket = new ServerSocket(4134); Socket socket = new Socket(); while (true) { System.out.println("正在监听------"); socket = serverSocket.accept(); System.out.println("监听到一个客户端请求"); System.out.println("为该客户端创建一个线程实列并开始运行该线程"); serviceThread thread1 = new serviceThread(socket); thread1.start(); } } catch (Exception e) { } } } class serviceThread extends Thread { private Socket socket; public serviceThread(Socket t_socket) { socket = t_socket; } @Override public void run() { System.out.println("线程开始,打印该客户端的ip和端口"); System.out.println(socket.getLocalAddress() + ": " + socket.getLocalPort()); InputStream clientInput = null; InputStreamReader clientInputStream = null; BufferedReader clientBufferReader = null; OutputStream clientOutStream = null; Writer clientWriter = null; System.out.println("打印该客户端的请求报文头"); try { clientBufferReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); String st = null; while ((st = clientBufferReader.readLine()) != null && st.length() != 0) { System.out.println(st); } socket.shutdownInput(); System.out.println("构造回应报文头并发送给还客户端"); clientWriter = new OutputStreamWriter(socket.getOutputStream(),"UTF-8"); clientWriter.write("HTTP/1.1 200 \r\n"); clientWriter.write("Transfer-Encoding: chunked"); clientWriter.write("Content-Type: text/html;charset=UTF-8\r\n"); clientWriter.write("\r\n"); clientWriter.write("helloWord\r\n"); clientWriter.flush(); socket.close(); }catch (Exception e) { } } }

这里要说明的是这个代码运行的流程 在这里插入图片描述 接下来我们分别用客户端1和客户端2向服务端发送请求,而后服务端会分别向客户端1和客户端发送回应,该回应到达客户端1和客户端2时,会被客户端1和客户端2(的浏览器)解析。我们用wireshark来分析这个过程。 1.首先我现在服务端运行这个Java代码 在这里插入图片描述 2.用客户端1向服务端发送请求 在这里插入图片描述 在这里插入图片描述 然后客户端1收到服务端的回应报文,并把它解析到浏览器上 在这里插入图片描述 接着我们来观察一下wireshark捕获到了什么 在这里插入图片描述 以上就是客户端1向服务端发送请求,然后服务端回应的过程

3.接着是客户端2,由于基本上和客户端1相似,这里就在过多讲解 用客户端2向服务端发送请求 在这里插入图片描述 在这里插入图片描述 4.有机会讲一下三次握手和四次挥手的过程,以及它们是如何保持了tcp的可靠连接



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有