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 script 数组去重两种方法
第一种方法: var arr=[1,1,2,3,4,4,4,5,6,6,6,6]; var arrb=Array(); for(var i=0;i<arr.length;i++) ...
- thinkphp 类的扩展
ThinkPHP的类库主要包括公共类库和应用类库,都是基于命名空间进行定义和扩展的.只要按照规范定义,都可以实现自动加载. 大理石平台价格 公共类库 公共类库通常是指ThinkPHP/Library目 ...
- 帝国cms过滤采集内容
在过滤广告正则的[!--ad--]标识处,加上过滤正则即可 https://jingyan.baidu.com/article/c275f6bae3ea0de33d75671c.html
- Android中的第一个NDK的例子
前几天研究了JNI技术后,想在Android上试一试研究结果,查阅了很多资料后,总结如下步骤: 首先来看一下什么是NDK NDK 提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动 ...
- 17 win7 sp1 x64/VS2015下配置creo4.0二次开发环境——调用了众多开源库(ceres-solver,PCL1.8.0,office 2016COM接口,MySql数据库等)
0 引言 本次开发环境的配置是在综合考虑了开源库的版本.VS版本以及CREO4.0的版本,同时针对甲方需求选择了win7 sp1 x64系统. 配置的过程中遇到了形形色色的问题,但是一一解决了.通过这 ...
- 双目立体匹配经典算法之Semi-Global Matching(SGM)概述:视差计算、视差优化
文章目录 视差计算 视差优化 剔除错误匹配 提高视差精度 抑制噪声 视差计算 在SGM算法中,视差计算采用赢家通吃(WTA)算法,每个像素选择最小聚合代价值所对应的视差值作为最终视差,视差计算的结 ...
- RouterOS视频教程下载
下载信息 名称:RouterOS视频教程下载 格式:MP4 版本:V1.0 https://pan.baidu.com/s/1skU6oW1 下载密码:nb97
- linux 网络监控软件nethogs iftop
1.nethogs yum -y install nethogs 装上了这个工具之后,使用起来就非常简单了.敲入nethogs 就会给出所有的信息.看下面的例子. root@ubuntu2:~# ne ...
- jQuery Ajax请求 .net 一般处理程序
初学ajax 一个简单的功能,调试了2个小时,代码如下虽然成功了 但是有错误 <!DOCTYPE html> <html> <head> <meta http ...
- 安装go环境
~~~~~~~~~~~~~~~~~~~~~~~~~~~~go项目运行时的依赖包安装问题~~~~~~~~~~~~~~~~~~~~~~~~~~~~1.安装go环境 wget https://dl.goog ...