Java自制简易Http服务器(2)

Java用socket基于http协议搭建一个简易的http服务器 目录前言正文socket侦听localhost的端口HttpServerThread类的实现HttpServerThread类大致框架HttpServerThread类 run 方法的实现分析请求头信息尝试获取本地文件对象传输文件:发送响应包头传输文件:发送文件内容完整代码演示传输html页面传输图片404 not found 页面 前言 上一篇【Java使用socket通过http下载文件】介绍了如何模拟一个“客户端”,从指定的url下载文件,那么今天来模拟一下“服务端” 在这个十分简陋的服务端搭建完成之 阅读详情

接着上回的代码进行讲解,上回的代码仅能传输文字信息,对图片信息没有办法传送,这次我们来补充传递图片信息的方法。


代码在上一次的代码中做了些修改

import java.io.*;
import java.net.*;

public class Java_web_test {
    public static void main(String args[]) throws IOException {
        ServerSocket tt=new ServerSocket(6699);
        while(true){
            String rootpath=System.getProperty("user.dir")+File.separator+"静态网页";
            Socket mt = tt.accept();
            BufferedReader asd =new BufferedReader(new InputStreamReader(mt.getInputStream()));
            String m,d;
            m=asd.readLine();
            d=m;
            System.out.println(d);
            while(asd.ready()){
                m=asd.readLine();
                System.out.println(m);
            }
            System.out.println(m);
            String[] array=d.split(" ");


            System.out.println();
            File sll=new File(rootpath+array[1]);
            if(sll.isFile()){
                BufferedInputStream mmt=new BufferedInputStream(new FileInputStream(rootpath+array[1]),206848);//这里使用InputStream而不是Reader主要是图片文件需要使用二进制流来进行读取(编码方式受限,二进制流比较稳妥)
                int wwt=mmt.available();//获得打开文件中的可读数据大小
                byte[] qwer=new byte[wwt];//创建报文缓冲区
                mmt.read(qwer);//将数据写入缓冲区

                BufferedOutputStream ssd=new BufferedOutputStream(mt.getOutputStream());

                StringBuffer n=new StringBuffer();
                n.append("Http/1.1 200 OK \r\n\r\n");
                int a=1,b=0;
                n.append(m);
                ssd.write(n.toString().getBytes());
                ssd.write(qwer);//将缓冲区中数据写出输出流
                System.out.println(n.toString());
                ssd.flush();
                }
            else{
                BufferedWriter sdd=new BufferedWriter(new OutputStreamWriter(mt.getOutputStream()));
                sdd.write("Http/1.1 404 ERROR \r\n\r\n");
                sdd.flush();
            }
            mt.shutdownOutput();
            mt.close();
        }
    }
}



这次的思路就是将Reader这种字符流读取(会强行对图片的二进制文件编码)的方法更替为字节流读取的方法,普适性更强

Java实现简易Tomcat服务器(清晰易懂) Tomcat服务器是一个轻量级的Java代码实现的WEB服务器。这篇文章将会讲述如何用Java实现一个简易版的Tomcat服务器。 简单的讲,简易原理是这样的: 1. Tomcat开始运行之后,会在主机上开一个端口(默认是80端口),在所开辟的端口上运行一个ServerSocket,执行accept()方法等待浏览器访问。 2. 浏览器访问目标主机的80端口,ServerSocket的acc 阅读详情

相关推荐

Java简易多线程HTTP服务器项目实践

HTTP使用的是请求-响应模型。客户端发起请求(Request),服务器返回响应(Response)。每一个HTTP请求都由请求行、请求头、空行(如果存在请求体)和请求体(可选)组成。响应结构类似,由状态行、响应头、空行和响应体组成。请求行包含请求方法(如GET、POST等),请求的URI(统一资源标识符)和HTTP版本。响应状态行包含了HTTP版本、状态码和状态码的文本描述。设计一个简易HTTP服务器时,主要目标是实现一个能够处理基本HTTP请求并返回适当响应的系统。

weixin_42234168的博客 720

java代码构建简单http服务器和客户端

初识http a、超文本传输 、应用层的面向对象的协议,概念介绍网上资源一大堆,关键是基于TCP/IP通信协议来传递数据。 b、一开始接触web项目,都是先接触的servlet,tomcat服务器默认实现的一套http规范,提供了基础服务和组件环境,直接拿到请求、构建正文、响应客户端 然而一个http请求包含: 第一行:请求方式(get、post、put、delete)+“空格”+URI+“空格”+http协议版本(0.9、1.0、1.1) eg:GET /hello.html HTTP/1.1 第二行:我

linhao_obj的博客 5744

简易HTTP服务器开发实战

HTTP(超文本传输协议)服务器是遵循HTTP标准的应用程序,用于响应客户端请求并返回内容。它存储、处理并发送网页或其他数据。服务器通过监听特定的网络端口,响应来自客户端的HTTP请求,提供内容服务。在互联网中,服务器和客户端之间的交互是基于请求-响应模型进行的。客户端(如浏览器或其他应用程序)发送HTTP请求到服务器,服务器处理请求后返回相应的HTTP响应。这一过程涉及到多种网络协议和技术,而HTTP服务器则是这一交互的核心处理单元。理解这一交互模式对于开发HTTP服务器至关重要。

weixin_31459297的博客 684

用Java实现一个简单的HTTP服务器(一)HTTP

用Java实现一个简单的HTTP服务器(一)一、HTTP协议简介二、HTTP工作原理三、HTTP请求方法四、HTTP状态码五、URL六、HTTP请求协议七、HTTP响应协议总结 简介:这学期报了计网创新的创新实验,在机房做基于交换机和路由器的计网实验。最近正在学Java,想用Java实现一个简单的HTTP服务器,接下来就是我的心路历程. 一、HTTP协议简介 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP) 是一种用于分布式、协作式和超媒体信息系统的应用层协议。

MrsYoutiao的博客 2555

Java HttpServer_Java项目:简易HTTP服务器类库实现

HTTP协议是互联网上应用最为广泛的网络协议之一,其核心工作模式为请求/响应模型。在这种模式下,客户端发起一个HTTP请求,包含目标资源的标识信息(如URL)和请求头,服务器在接收到请求后,根据请求的内容对资源进行处理,并通过HTTP响应返回给客户端,其中包含状态码、响应头和可能的响应体。Java NIO(New I/O)在JDK 1.4中引入,提供了与传统IO不同的I/O操作方式。NIO核心组件包括通道(Channel)、缓冲区(Buffer)和选择器(Selector)。

weixin_34471637的博客 822

Http服务器与客户端实例(Java版)

通过该实例可以清楚了解整个 http包头及 工作原理

java搭建http协议服务器,半小时实现Java手撸Http协议,爽!(含完整源码)

大家好,我是冰河~~很多小伙伴跟我说,学习网络太难了,怎么办?其实很多技术都是相通的,只要你理解了技术的本质,你自己都可以实现它。这不,冰河就趁着周末,只用了几个Java类就简单的实现了Http协议,爽!!HTTP协议属于应用层协议,它构建于TCP和IP协议之上,处于TCP/IP协议架构层的顶端,所以,它不用处理下层协议间诸如丢包补发、握手及数据的分段及重新组装等繁琐的细节,使开发人员可以专注于应...

weixin_39641697的博客 787

http上传文件客户端和服务端代码

http上传文件客户端和服务端代码,可以做个参考,比较详细。也可以参看我的博客http://blog.youkuaiyun.com/qiumeng_1314/article/details/79192766

用Java编写你自己的简单HTTP服务器

HTTP是个大协议,完整功能的HTTP服务器必须响应资源请求,将URL转换为本地系统的资源名。响应各种形式的HTTP请求(GET、POST等)。处理不存在的文件请求,返回各种形式的状态码,解析MIME类型等。但许多特定功能的HTTP服务器并不需要所有这些功能。例如,很多网站只是想显示“建设中“的消息。很显然,Apache对于这样的网站是大材小用了。这样的网站完全可以使用只做一件事情的定制服务器。J...

tansitongba 2495

java实现http服务器实例

使用java实现一个http服务器的简单实例,经过了基本的功能测试,包含源码和注释,可以很好的帮助理解http协议

LBM模式学习·保姆级安装及初步使用教程

在学习LBM的过程中,我感觉可供参考的材料较为有限,对于一个独立学习LBM模式的初学者非常不友好(我就是这个初学者哈哈),因此萌生了写一篇保姆级的LBM模式教程,并将我踩过的坑一一指出,有助于后来者更快地上手该模式,而非半途而废。

weixin_42762673的博客 1万+

Java 自定义简单Http服务器

package src.web; import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.Out.

清山博客 1039

NMS非极大值抑制算法原理

NMS非极大值抑制算法

pywin 3506

java 编写简易的http服务器

java 编写简易的http服务器 想要写一个http服务器,首先得了解http协议。这里仅介绍一下相关的知识。 1、http协议 HTTP请求报文 在请求中,HTTP报文由方法、URI、HTTP版本、HTTP首部字段等部分构成。其中方法、URI、HTTP版本作为首行,然后每个HTTP首部字段为一行,以上内容简称为请求头,如下请求头: GET /favicon.ico HTTP/1.1...

一小生,名大白 9104

【fNIRS可视化学习1】基于NIRS-SPM进行光极可视化并计算通道坐标

设头皮上的目标点为P₀(x₀, y₀, z₀),需要在大脑皮层点集S上找到最合适的投影点P'。

Rose9614的博客 2210

华中科技大学头歌 交通灯系统设计 Lojisim 详细实验报告,实验图,仅供参考

本实验也是参考了许多大神的做法,也是小白一个!有完整实验代码,实验报告,答辩PPT(ppt当时做得仓促,有点拉胯)~ 需要请评论或私QQ:3096524043(有偿~~) 一、数码管驱动 由真值表生成电路 二、四位无符号比较器设计 三、8位无符号比较器设计 四、一位2路选择器设计 五、八位2路选择器设计 六、BCD双向计数器状态机设计 七、BCD双向计数器输出函数设计 ...

FindXY的博客 1万+

JAVA实现简易HTTP服务器

说实话,之前完全没有想过,我还能写出服务器。感觉服务器这么高端的东西,能会用就不错了,还能写。 不吐槽了,开始了。 这次的作业是搭建一个服务器,要能接收请求,并给浏览器返回正确响应。 项目的下载地址 项目目标:实现一个简易的多线程服务器,可以处理来自浏览器的请求(GET/POST),并做出正确的回应。 请求分以下四种类型: 1. 无参数,文本文件类型 2.

Aaron Yang 2万+

手把手教你学Simulink——基于经典PID控制的电机系统场景实例:永磁同步电机(PMSM) PID转速控制仿真

*永磁同步电机(PMSM)因其高效、高功率密度和良好的动态响应特性,在现代工业自动化、电动汽车驱动系统等领域得到了广泛应用。为了实现对PMSM的速度精确控制,通常采用矢量控制(Field Oriented Control, FOC)**策略,其中PID控制器是实现速度环和电流环调节的关键组件。本教程将带你使用构建一个基于PID控制的永磁同步电机转速控制系统仿真模型PMSM电机建模矢量控制(FOC)策略实现PID控制器设计系统仿真与调试控制效果分析本文介绍了如何使用构建一个。

MHD0815的博客 6952

使用java自制简易web服务器

记得好多年前,刚刚开始学javaweb的时候,老师教的第一件事是安装jdk,第二件事就是安装tomcat了。当时老师的操作是,下载完压缩包后解压,然后把tomcat的bin目录添加到环境变量里面,然后打开黑乎乎的cmd,输入catalina就可以运行tomcat了。当时还不知道为什么只要添加了环境变量,就可以在cmd里面启动tomcat,更不要说为什么我们什么都没有设置,输入一个命令就能启动web服务器了。

haohulala的博客 2233

lammps案例:聚乙烯和石墨烯界面pull out模拟

大家好,我是小马老师。 本文介绍lammps模拟计算界面结合力的一个案例。 本案例参考论文《The interfacial mechanical properties of functionalized graphene- polymer nanocomposites》,对论文作者表示感谢。 模型共分2层,上层为聚乙烯模型,下次为单层石墨烯,模拟过程共分3部分:建模、弛豫、拉伸。 (1)建模 使用MS建立聚乙烯和石墨烯模型,具体方法可参考之前的推文,使用build layer方法建立聚乙烯和石墨烯组合模型,

lammps_jiayou的博客 3497

文章ACCEPT之后填写内容教程-Springer-Verlag即施普林格

1. 确认corresponding author通讯作者机构是否正确(最好细分到系,如搜不到系只填大学也可)这些信息因为在投稿的时候都填过,所以一般都没问题,可确认并继续。2. Co-Author: 这篇文章有没有其他作者,如果有就选yes,并确认投稿时所填的作者姓名和机构是否正确。这个也是如果前期都填对了就不用修改。3. Research funders: 问文章的研究有没有资助,没有就选no,有就选yes,并填写机构名称和grant/contact numbers。

ZhangJiqun&191cm&85kg 4796

Java自制简易http服务器(1)

由于计算机网络原理这门课的作业……嗯,简单练习了下做一个简易的服务器该简易服务器十分简陋(甚至只有两个状态(200和404),只接受get方法),同时也没有使用任何比较复杂的类和包。代码基本纯暴力实现……import java.io.*; import java.net.*; public class Java_web_test { public static void main(Str...

github_37666068的博客 1036

【七.三维视觉与视频分析】【1.点云处理:PointNet++/PointTransformer】

各位老铁,今天咱们要聊的可不是普通的二维图像处理,而是三维视觉领域最硬核的技术——点云处理。从最早的PointNet到如今的PointTransformer,这场技术进化堪比三维版的"像素革命"。今天咱们就深入解剖两大里程碑:PointNet++和PointTransformer,保证让你看完全文就能在点云领域横着走!想象一下,你抓了把沙子撒在空中,每粒沙子的位置都是三维坐标——这就是点云的典型形态。最后送大家一句话:点云处理就像在三维宇宙中寻找星辰的轨迹,既要望远镜的宏观视野,也要显微镜的细致入微。

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 474

基于httpserver类实现的简易http服务器

利用Java的`com.sun.net`包下的http类,实现的简易http服务器。全部代码已上传至github,链接在文末。

悲伤无声地涌出来 2647

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

实现一个简易的http服务器

准备找工作,把自己以前做的项目做一下整理,回顾一下知识 使用技术 基于Java BIO,多线程,Socket网络编程,xml解析 具备功能 Request封装Http请求报文 Response封装HTTP响应报文 Dispatcher实现分发器功能,进行Servlet的分发 xmlParse解析web.xml文件 支持Get和Post两种请求 文件结构 项目主要是红线框中的内容,其余的部分是自己写服务器之前的一些学习,不影响项目,只是不舍得删除所以留着 HTTPServer 下面只放了重要部分的代码 值得

m0_47574787的博客 831

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: Java 日看一类(39)之IO包中的ObjectStreamException和OptionalDataException异常类
下一篇: Java 日看一类(40)之IO包中的OutputStream类和Closeable接口
wyf95278
博客等级 码龄10年 38粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值