使用Java编写HTTP客户端和服务器框架:一场“请求与响应”的舞蹈

news2024/11/29 5:44:45

在这个网络发达的时代,HTTP协议成为了我们与世界沟通的桥梁。而Java,这个强大的编程语言,给了我们工具去编写自己的HTTP客户端和服务器框架。这就像给了我们一套乐高积木,让我们自由地创造自己的城堡。

首先,我们来谈谈如何使用Java编写一个简单的HTTP服务器框架。这就像搭建一个舞台,等待演员(客户端)来表演。

java复制代码

import java.io.*;

import java.net.*;

public class SimpleHTTPServer {

public static void main(String[] args) throws IOException {

ServerSocket serverSocket = new ServerSocket(8080); // 搭建舞台,等待演员

while (true) {

Socket socket = serverSocket.accept(); // 演员到来,接受请求

new Thread(new HTTPRequestHandler(socket)).start(); // 为每个演员开启新的线程

}

}

}

class HTTPRequestHandler implements Runnable {

private final Socket socket;

public HTTPRequestHandler(Socket socket) {

this.socket = socket;

}

@Override 

public void run() {

try {

// 读取演员的请求并做出响应

// ...

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

socket.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

这个简单的HTTP服务器框架会一直监听8080端口,等待客户端的连接。当有客户端连接时,它会开启一个新的线程来处理请求。处理请求的线程会读取客户端的请求,然后做出相应的响应。这样,我们就完成了一个简单的HTTP服务器的搭建。

接下来,我们再来谈谈如何使用Java编写一个简单的HTTP客户端框架。这就像是我们自己成为了演员,要走上舞台(服务器)去表演。

java复制代码

import java.io.*;

import java.net.*;

public class SimpleHTTPClient {

public static void main(String[] args) throws IOException {

Socket socket = new Socket("localhost", 8080); // 走上舞台,开始表演

OutputStream outputStream = socket.getOutputStream(); // 准备表演道具

PrintWriter writer = new PrintWriter(outputStream); // 穿戴好表演服装,准备开始表演

writer.write("GET / HTTP/1.1\r\n\r\n"); // 编写自己的台词,开始表演!

writer.flush(); // 表演结束,整理道具,清理舞台

socket.close(); // 谢幕,离开舞台

}

}

这个简单的HTTP客户端框架会连接到本地的8080端口,然后发送一个HTTP GET请求。这样,我们就完成了一个简单的HTTP客户端的编写。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1432206.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

openlayers常用示例

简单说一下吧,最近做了十来天的的openlayers,然后稍微研究了一下,这里总结并做了一些示例给大家分享一下,应该是相对常用的一部分吧,由于做的时间比较短,这里写了十来个示例了,有实际项目用到的…

2024 springboot Mybatis-flex 打包出错

Mybatis-flex官网:快速开始 - MyBatis-Flex 官方网站 从 Mybatis-flex官网获取模板后,加入自己的项目内容想打包确保错,先试试一下方法 这里改成skip的默认是true改成false,再次打包就可以了

leetcode206反转链表|详细算法讲解学习

题目 https://leetcode.cn/problems/reverse-linked-list/ 这道题对于刚开始学习数据结构和算法的人来说有点难,是入门的重要典型题目;但等数据结构入门之后,这就会是一道非常简单的题目了。 算法一(算法正确但超出时间限制&am…

C++算法学习心得七.贪心算法(3)

1.根据身高重建队列(406题) 题目描述: 假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi ,前面 …

day42_jdbc

今日内容 0 复习昨日 1 JDBC概述 2 JDBC开发步骤 3 完成增删改操作 4 ResultSet 5 登录案例 0 复习昨日 1 写出JQuery,通过获得id获得dom,并给input输入框赋值的语句 $(“#id”).val(“值”) 2 mysql内连接和外连接的区别 内连接只会保留完全符合关联条件的数据 外连接会保留表…

20240203-平常心

我一直强调自己要保持一颗平常心,耐住性子,过好每一刻,做好每一件事情,不断的向自己的目标去推进。就像图中的橙子一样,从刚收到这棵柠檬树的时候,我就在期待结果。 但是柠檬树的哗哗落叶、蔫啦吧唧&#x…

【GAMES101】Lecture 16 蒙特卡洛积分

为了后面要讲的路径追踪,需要讲一下这个蒙特卡洛积分,同时需要回顾一下高等数学中的微积分和概率论与统计学的知识 目录 微积分 概念论与统计 蒙特卡洛积分 微积分 定积分是微积分中的一种重要概念,用于计算函数在一个区间上的总体积、…

性能测试+Jmeter介绍

文章目录 什么是性能测试?性能测试的目的性能测试分类一般性能测试负载测试压力测试大数据量测试配置测试稳定性测试 性能测试术语虚拟用户并发及并发用户数响应时间每秒事务数吞吐量、吞吐率点击率性能计数器资源利用率 性能测试流程测试计划阶段测试设计阶段测试开发阶段测试…

自考怎么搜答案? #媒体#微信#经验分享

在大学生的学习生活中,遇到难题和疑惑是常有的事情。为了解决这个问题,越来越多的大学生开始使用搜题软件来帮助他们快速找到答案。今天,我将为大家分享几款大学生常用的搜题软件,让我们一起来看看它们的特点和优势吧!…

Vulnhub-DC8

信息收集 # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:43:7c:b1, IPv4: 192.168.1.60 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.1.1 00:50:56:c0:00:08 VMware, Inc. 192.168.1.2 00:50:56:f…

【Vue.js设计与实现】第二篇:响应系统-阅读笔记(持续更新)

从高层设计的角度去探讨框架需要关注的问题。 系列目录: 标题博客第一篇:框架设计概览【Vue.js设计与实现】第一篇:框架设计概览-阅读笔记第二篇:响应系统【Vue.js设计与实现】第二篇:响应系统-阅读笔记第三篇&#x…

spring-authorization-server 公共客户端方式获取授权码和Token的流程

spring-authorization-serve【版本1.2.1】官方文档中提及了关于RegisteredClient中所涉及的客户端身份验证方法,也就是RegisteredClient中提及的clientAuthenticationMethods属性对应的“none”值,目前clientAuthenticationMethods属性支持的值包含&…

Maven提示Failure to find com.oracle:ojdbc14:jar:10.2.0.4.0

目录 问题 解决方案 1、下载oracle的驱动jar包 2、安装到本地仓库 3、检查本地仓库是否成功安装 4、Maven先clean ,再install。 问题 项目引入Oracle依赖后报错,显示为红色。 解决方案 1、下载oracle的驱动jar包 首先我们要去下载一个oracle的…

c语言--assert断言(详解)

目录 一、断言的概念二、assert断言2.1 代码12.1.1运行结果2.1.2分析 2.2代码22.2.1运行结果2.2.2分析2.3代码32.3.1运行结果及其分析 三、优点四、缺点五、注意 一、断言的概念 assert.h 头⽂件定义了宏 assert() ,用于在运行时确保程序符合指定条件,如…

16- OpenCV:轮廓的发现和轮廓绘制、凸包

目录 一、轮廓发现 1、轮廓发现(find contour in your image) 的含义 2、相关的API 以及代码演示 二、凸包 1、凸包(Convex Hull)的含义 2、Graham扫描算法- 概念介绍 3、cv::convexHull 以及代码演示 三、轮廓周围绘制矩形和圆形框 一、轮廓发现…

ele-h5项目使用vue3+vite+vant4开发:第一节、页面头部实现

实现页面 确认需求 顶部提示栏搜索框搜索提示 normalize.css:处理不同浏览器的默认样式 安装 npm i normalize.css 使用 src\App.vue<style scoped> import normalize.css;#app {/** 让字体抗锯齿&#xff0c;看起来更清晰 */-webkit-font-smoothing: antialiased;-moz-o…

Elasticsearch(ES) 简述请求操作索引下文档 增删查改操作

上文 Elasticsearch(ES) 创建带有分词器规则的索引 带着大家创建了一个带有分词功能的索引 老规矩 我们启动一下ES服务 本文 我们就来说说 关于文档的操作 我们先来添加一个文档 就像数据库加一条数据一样 这里 并不需要指定什么表结构和数据结构 它的文档结构是无模式的 添…

Python新春烟花盛宴

写在前面 哈喽小伙伴们&#xff0c;博主在这里提前祝大家新春快乐呀&#xff01;我用Python绽放了一场新春烟花盛宴&#xff0c;一起来看看吧&#xff01; 环境需求 python3.11.4及以上PyCharm Community Edition 2023.2.5pyinstaller6.2.0&#xff08;可选&#xff0c;这个库…

通过 editplus 批量转换文本编码

有时候需要对文本的编码进行批量转换&#xff0c;文本编辑器 notepad 中的“编码”菜单可以用来转换单个的文档编码&#xff0c;当文档数量多的时候&#xff0c;一个个操作比较繁琐&#xff0c;通过文本编辑器 editplus 软件&#xff0c;可以方便快速地批量修改文本文件的编码&…

微信网页授权之使用完整服务解决方案

目录 微信网页授权能力调整造成的问题 能力调整的内容和理由 原有运行方案 is_snapshotuser字段 改造原有方案 如何复现测试场景 小结 微信网页授权能力调整造成的问题 依附于第三方的开发&#xff0c;做为开发者经常会遇到第三方进行规范和开发的调整&#xff0c;如开…