java_网络编程之BS(web案例)
package BsServersocket;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Client {
/**
* 模拟BS服务器:
* 创建BS版本的TCP服务器
*
* //1.创建服务器ServerSocket,和系统要指定的端口号
* //2.使用accept获取到请求的客户端对象(浏览器)
* //3.使用Socket对下个中的getInputStream,获取到网络字节输入流InputStream对象
* //4.使用网络字节输入流InputStream对象中的方法read获取客户端的请求信息
* http://127.0.0.1:8080/文件目录
* 服务器需要给客户端回写一个html页面(文件)
* 我们需要读取index_html文件,就必须知道这个文件的地址
* 这个文件的地址就是请求信息的第一行
* 可以使用BufferedReader中的方法readLine读取一行
* new BufferedReader(new InputStreamReader(is)把网络字节输入流转为字符缓冲输入流
* 使用String类的方法split根据空格切割字符串获取中间部分
* 使用String的方法subString(1)截取字符串获取到html文件路径
* 服务器创建本地字节输入流根据获取到的文件路径读取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());
* 服务器端使用网络字节输出流把读取到的文件写到客户端
*不显示图片:
* 浏览器解析服务器回写的html页面,页面中如果有图片,那么浏览器就会单独在开启一个线程,读取服务器图片
* 让服务器一直处于监听状态(while)
* 使用线程
*
*/
public static void main(String[] args) throws IOException {
//1.创建服务器ServerSocket,和系统要指定的端口号
ServerSocket serverSocket = new ServerSocket(8080);
//使用while循环让服务器一直跑
while (true) {
//2.使用accept获取到请求的客户端对象(浏览器)
Socket socket = serverSocket.accept();
//开启线程
new Thread(new Runnable() {
@Override
public void run() {
try{
//3.使用Socket对下个中的getInputStream,获取到网络字节输入流InputStream对象
InputStream is = socket.getInputStream();
//4.使用网络字节输入流InputStream对象中的方法read获取客户端的请求信息
/*byte[] bytes = new byte[1024];
int len = is.read(bytes);
String str = new String(bytes);*/
//使用BufferedReader把网络字节输入流转换为缓冲输入流读取第一行
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String s = br.readLine();
//使用String类的split方法切割得到文件路径
String[] s1 = s.split(" ");
//使用String类的subString方法截取
String htmlpath = s1[1].substring(1);
//服务器创建本地字节输入流根据获取到的文件路径读取html文件
FileInputStream fis = new FileInputStream(htmlpath);
//务器端使用网络字节输出流把读取到的文件写到客户端
OutputStream ous = socket.getOutputStream();
//出时先固定写
//写入HTTP协议响应,固定方法
ous.write("HTTP/1.1 200 ok、\r\n".getBytes());
ous.write("Content-Type:text/html\r\n".getBytes());
//必须要写入空行,否则浏览器不解析
ous.write("\r\n".getBytes());
//一读一写回写
int len = 0;
byte[] bytes = new byte[1024];
while ((len = fis.read(bytes)) != -1) {
ous.write(bytes, 0, len);
}
fis.close();
socket.close();
}catch (IOException e){
e.printStackTrace();
}
}
}).start();
}
}
}
java_网络编程之BS(web案例)的更多相关文章
- GO语言的进阶之路-网络编程之socket
GO语言的进阶之路-网络编程之socket 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是socket; 在说socket之前,我们要对两个概念要有所了解,就是IP和端口 ...
- java网络编程之TCP通讯
java中的网络编程之TCP协议的详细介绍,以及如何使用,同时我在下面举2例说明如何搭配IO流进行操作, /* *TCP *建立连接,形成传输数据的通道: *在连接中进行大数据量传输: *通过三次握手 ...
- 网络编程之UDP编程
网络编程之UDP编程 UDP协议是一种不可靠的网络协议,它在通信的2端各建立一个Socket,但是这个Socket之间并没有虚拟链路,这2个Socket只是发送和接受数据的对象,Java提供了Data ...
- 网络编程之Socket & ServerSocket
网络编程之Socket & ServerSocket Socket:网络套接字,网络插座,建立网络通信连接至少要一对端口号(socket).socket本质是编程接口(API),对TCP/IP ...
- 网络编程之TCP/IP各层详解
网络编程之TCP/IP各层详解 我们将应用层,表示层,会话层并作应用层,从TCP/IP五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议,就理解了整个物联网通信的原理. 首先,用户感知到的只 ...
- 网络编程之socket
网络编程之socket socket:在网络编程中的一个基本组件,也称套接字. 一个套接字就是socket模块中的socket类的一个实例. 套接字包括两个: 服务器套接字和客户机套接字 套接字的实例 ...
- [深入浅出WP8.1(Runtime)]网络编程之HttpClient类
12.2 网络编程之HttpClient类 除了可以使用HttpWebRequest类来实现HTTP网络请求之外,我们还可以使用HttpClient类来实现.对于基本的请求操作,HttpClient类 ...
- python3网络编程之socketserver
本节主要是讲解python3网络编程之socketserver,在上一节中我们讲到了socket.由于socket无法支持多用户和多并发,于是就有了socket server. socket serv ...
- 网络编程之TCP编程
网络编程之TCP编程 前面已经介绍过关于TCP协议的东西,这里不做赘述.Java对于基于TCP协议的网络通信提供了良好的封装,Java使用socket对象来代表两端的通信窗口,并通过Socket产生I ...
随机推荐
- java.lang.InstantiationException: com.lch.commder.entity.Car 已解决
以上的上异常,是你的类实例化对象失败的时候抛出异常,这种异常多会出现在抽象类中,在使用反射的机制时,解决方法很简单 在你的类中再加一个空构造方法
- 【集合!】 20140416 && 20140417集训 总结
mobius的奇怪演绎 当我第一眼看见题目中出现mobius的时候,我唯一想到的就是某科学家对于n维空间的阐述与思考,同时还提出了一个mobius环.而这道题中的环就是mobius环咯.不过其实这是一 ...
- SCP-bzoj-1000
项目编号:bzoj-1000 项目等级:Keter 项目描述: 鉴于该项目的奇特性质,任何拥有Administrator以下权限者均不予查看项目描述.如有违反,将导致AwD成功突破Site bzoj收 ...
- LUOGU P3723 [AH2017/HNOI2017]礼物 (fft)
传送门 解题思路 首先我们设变化量为\(r\),那么最终的答案就可以写成 : \[ ans=min(\sum\limits_{i=1}^n(a_i-b_i+r)^2) \] \[ ans=min(\s ...
- NX二次开发-UFUN点构造器UF_UI_point_construct
#include <uf.h> #include <uf_ui.h> UF_initialize(); //点构造器 char sCue[] = "点构造器" ...
- js的线程和同步异步以及console.log机制
项目上线了,闲下来就写写东西吧.积累了好多东西都没有做笔记~挑几个印象深刻的记录一下吧. js的同步异步以及单线程问题: 都知道单线程是js的一大特性.但是通常io(ajax获取服务器数据).用户/浏 ...
- c# ToString()格式大全(转)
stringstr1 =string.Format("{0:N1}",56789); //result: 56,789.0stringstr2 =str ...
- CSS3:CSS3 简介
ylbtech-CSS3:CSS3 简介 1.返回顶部 1. CSS3 简介 对CSS3已完全向后兼容,所以你就不必改变现有的设计.浏览器将永远支持CSS2. CSS3 模块 CSS3被拆分为&quo ...
- 解决多个window.onscroll覆盖的问题
项目中有好几处都有用到监听页面滚动window.onscroll这个函数,结果出现了后者覆盖前者的问题. 最后是通过addEventListener解决了这种共存问题. ⚠️该处代码thi ...
- Day 14: 内置函数:
Python提供了,许多内置的函数我们按 函数的作用来分类: 一.作用域相关的内置函数(2个) (1).globals() 更改全局变量 (2).locals()更改局并命名空间的变量(上一级) 五. ...