创建BS版本的TCP服务器

public class TCPServer {public static void main(String[] args) throws IOException {ServerSocket serverSocket=new ServerSocket(8080);Socket socket=serverSocket.accept();InputStream is=socket.getInputStream();byte[]bytes=new byte[1024];int len=0;while((len=is.read(bytes))!=-1){System.out.println(new String(bytes,0,len));}}
}

随便把一个网页复制到IDEA项目中

 然后打开浏览器输入:

127.0.0.1:8080/项目名称名/web/网页名,访问这个服务器

  输出结果:

GET /hello/web/zhihu.mhtml HTTP/1.1
Host: 127.0.0.1:8080
Connection: keep-alive
Cache-Control: max-age=0
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9

服务器给客户端回写一个html页面(文件)

我们需要读取html文件,就必须知道这个文件的地址

而这个地址就是请求信息的第一行

可以使用BufferReader方法的readline读取一行

InputStream is=socket.getInputStream();
new BufferedReader(new InputStreamReader(is));

读取一行后的结果:

使用String类的方法获取中间的地址:

split(" "):   切割字符串,获取中间的部分

substring(1):   去掉开头的/

服务器创建一个本地的字节输入流,根据获取到的文件路径,读取html文件

//写入HTTP协议相应头,固定写法
out.write("HTTP/1.1 200 OK\r\n".getBytes());
out.write("Content-Type:text/html\r\n".getBytes());
//必须写入空行,否则浏览器不解析
out.write("\r\n".getBytes());

服务器端使用网络字节输出流把读取到的文件,写到客户端(浏览器)显示

public class TCPServer {public static void main(String[] args) throws IOException {ServerSocket serverSocket = new ServerSocket(8080);FileInputStream fis;Socket socket;while (true) {socket= serverSocket.accept();InputStream is = socket.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));String line = br.readLine();String htmlpath = line.split(" ")[1].substring(1);fis= new FileInputStream(htmlpath);OutputStream os = socket.getOutputStream();//写入HTTP协议相应头,固定写法os.write("HTTP/1.1 200 OK\r\n".getBytes());os.write("Content-Type:text/html\r\n".getBytes());
//必须写入空行,否则浏览器不解析os.write("\r\n".getBytes());//复制文件int len = 0;byte[] bytes = new byte[1024];while ((len = fis.read(bytes)) != -1) {os.write(bytes, 0, len);}}}
}

【java笔记】模拟B/S服务器相关推荐

  1. Java笔记-模拟QQ三方登录(单点登录2.0)

    本次例子模拟这样的情况: 一共有2个spring boot应用: 一个是某公司的web,第二个是QQ服务端. 某公司的应用为127.0.0.1:8082 QQ服务端为127.0.0.1:8081 演示 ...

  2. Java笔记——控制台模拟“双色球”福利彩票游戏

    Java笔记--控制台模拟"双色球"福利彩票游戏 说明:本打算重新巩固java知识并重新记录笔记,但是现在对于一个20多年的语言而言,鄙人的能力实在是提炼不出来什么精华,直接上练手 ...

  3. 【Java笔记+踩坑】SpringBoot基础3——开发。热部署+配置高级+整合NoSQL/缓存/任务/邮件/监控

      导航: [黑马Java笔记+踩坑汇总]JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城 目录 ...

  4. java笔记(第一部分语法基础)

    java笔记 一. 计算机概述 1.1 计算机组成部分 1.2 人机交互方式 1.3 计算机语言 1.4 Java语言介绍 1.5 Java开发环境搭建 二.基本数据类型与运算 2.1 关键字 2.2 ...

  5. 【Java笔记+踩坑】SpringBoot——基础

      导航: [黑马Java笔记+踩坑汇总]JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城 目录 ...

  6. Java笔记-Java日常笔记-Java核心语言-史上最全Java笔记-Java烂笔头-实时更新(~v~)

    阿一的日常Java笔记,实时更新,有什么问题可以留言交流一下,大家一起共同进步!!! 1.Java基础 1.1.基本语法 1.1.1.关键字 ​ 定义:被java赋予特殊含义的字符串(单词): ​ 关 ...

  7. Java笔记整理五(Iterator接口,泛型,常见数据结构(栈,队列,数组,链表,红黑树,集合),jdk新特性,异常,多线程,Lambda表达式)

    Java笔记整理五 1.1Iterator接口 Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象 ...

  8. Java爬虫模拟登录——不给我毛概二的H某大学

    你的账号访问太频繁,请一分钟之后再试! 从大一开始 就用脚本在刷课 在专业课踢的只剩下一门C#的情况下 活活刷到一周的课 大二开始教务系统多了一个非常**的操作 退课池 and 访问频繁缓冲 难道,我 ...

  9. 无忧考吧2017二级java_无忧考吧二级JAVA超级模拟软件下载_无忧考吧二级JAVA超级模拟软件官方下载-太平洋下载中心...

    无忧考吧二级JAVA超级模拟软件是一款可以帮助用户朋友来学习计算机二级java语言考试的软件,使用这款二级java模拟考试软件可以帮助用户快速的掌握学习内容和操作逻辑,让你顺利的通过二级java考试. ...

  10. 10.8-全栈Java笔记:序列化/反序列化的步骤和实例

    本节我们详细讲解10.3节中提到的序列化和反序列化操作. 序列化和反序列化是什么 当两个进程远程通信时,彼此可以发送各种类型的数据. 无论是何种类型的数据,都会以二进制序列的形式在网络上传送.比如,我 ...

最新文章

  1. 在Delphi中根据SQL Server表名和表描述生成SQL语句
  2. chap单向认证客户端
  3. 【04】AngularJS 表达式
  4. MySQL 配置错误
  5. 英雄互娱:中止代理的《NBA LIVE》在中国大陆地区所有推广活动
  6. 浏览器UI线程更新机制
  7. Python+OpenCV:图像金字塔
  8. jquery系列教程4-事件操作全解
  9. Windows10下VB6.0开发——常用数值处理函数工具
  10. php5.6 连接SQL SERVER
  11. 安阳工学院ACM历史(续)
  12. matlab绘制奈奎图,matlab画奈奎斯特图
  13. 转《DB2操作指南及命令大全》
  14. 为什么贝叶斯统计如此重要?
  15. mysql的联接算法_联接算法
  16. Python OpenCV --Drowsiness Detector 睡意检测--项目记录
  17. axis2+MyEclipse8.5实现webservice接口例子(没有使用插件)
  18. html长图转换成pdf,iOS将HTML页面转换成PDF文件保存到本地并分享传输文件
  19. 二线法和四线法测量电阻的原理及区别
  20. C语言如何求n次方根

热门文章

  1. FZU Problem 2168 防守阵地 I
  2. HDU2003 求绝对值【入门】
  3. Bailian2754 八皇后【回溯】
  4. Bailian4018 子串【字符串】
  5. HDU1024 Max Sum Plus Plus【最大子段和+DP】
  6. I00035 完美数(Perfect number)
  7. 100 以内的数的研究
  8. 机器学习算法工程师的经典面试问题
  9. sql like 通配符_《SQL必知必会》学习笔记
  10. python自学视频推荐-python自学视频看这个就对了