当前位置: 首页 > news >正文

中国建设银行手机网站首页自己做的网站如何兼容ie11

中国建设银行手机网站首页,自己做的网站如何兼容ie11,网站制作内容文案,包头市做网站公司Socket通信简介 参考文章#xff1a;socket通讯原理及例程#xff08;一看就懂#xff09; socket是介于应用层#xff08;http协议#xff09;和传输层#xff08;TCP/UDP协议#xff09;之间的一层虚拟层 Socket是一个程序#xff0c;符合TCP/UDP协议的规范…Socket通信简介 参考文章socket通讯原理及例程一看就懂 socket是介于应用层http协议和传输层TCP/UDP协议之间的一层虚拟层 Socket是一个程序符合TCP/UDP协议的规范并封装了TCP/UDP等协议 在CS模式client-server模式即客户端-服务端模式中Socket是客户端和服务端的共同组成部分 从图中我们可以看到socket负责建立连接请求数据与响应数据结束连接 而tomcat负责其中具体的请求处理 Socket的具体实现 第一步建立连接 /*** tomcat启动类*/ public class TomcatStart {private static Request request new Request();public static void main(String[] args) throws IOException {System.out.println(socket服务器启动);// 1. 打开相关通信端口// tomcat:8080,mysql:3306,应用软件独占一个端口的全部信息ServerSocket serverSocket new ServerSocket(8666);// 线程持续扫描当前网卡xxxx端口(死循环)如果有数据就拿过来交给端口对应的程序处理// 2. 监听并接收请求数据while (true) {// 一旦发现有数据就打开socket通信// 这里没有创建新的线程所以这里是main线程监听数据Socket socket serverSocket.accept();System.out.println(socket.getInetAddress().getCanonicalHostName() 进行了连接);// 第二步监听并接收到了数据处理数据可以用主线程但是没必要创建子线程处理// 每接收一次数据创建一个子线程Thread t1 new Thread(() - {// 处理数据包括两部分读和写try {dataHandle(socket);} catch (Exception e) {throw new RuntimeException(e);}});t1.start();}} }第二步读入并处理请求数据写出响应数据给浏览器 读入时应该做一步判断这里没有考虑到动态资源只有静态资源所以不需要判断 // 处理数据的方法读写public static void dataHandle(Socket socket) throws Exception {// 1. 读取请求的数据// 1.1打开输入流对象读取socket对象中的数据这里的数据都是0101010的二进制数据InputStream inputStream socket.getInputStream();requestContext(inputStream);// 数据的输出Response response new Response(socket.getOutputStream());// 访问资源response.writeHtml(request.getUrl());}public static void requestContext(InputStream inputStream) throws IOException {// 1.2二进制数据的翻译并读取int count 0;while (count 0) {// 可以不受阻塞地从此输入流读取或跳过的估计字节数如果到达输入流末尾则返回 0count inputStream.available();}byte[] bytes new byte[count];inputStream.read(bytes);// 这里用URLDecoder是为了防止路径中出现特殊符号经过get请求之后会被URLEncode为乱码String context URLDecoder.decode(new String(bytes, utf-8));System.out.println(context: context);// 空请求if (.equals(context)) {System.out.println(null request!);} else {// 非空请求逐行获取request内容//根据换行来获取第一行数据String firstLine context.split(\\n)[0];// 第一行数据的第2个字符串System.out.println(url: firstLine.split(\\s)[1]);request.setUrl(firstLine.split(\\s)[1]);// 第一行数据的第1个字符串System.out.println(methodType: firstLine.split(\\s)[0]);request.setMethodType(firstLine.split(\\s)[0]);}我们不难发现完成这一步的关键在于Request类和Response类的具体实现 public class Request implements MyHttpServletRequest{private String url;private String methodType;public String getUrl() {return url;}public void setUrl(String url) {this.url url;}public String getMethodType() {return methodType;}public void setMethodType(String methodType) {this.methodType methodType;} } public class Response implements MyHttpServletResponse {// 获取输出流private OutputStream outputStream;public Response(OutputStream outputStream) {this.outputStream outputStream;}// 静态资源的输出public void writeHtml(String path) throws Exception {//// 根据路径返回资源路径地址例如http://localhost:8666/index.htmlString resource FileUtil.getResoucePath(path);File file new File(resource);if (file.exists()) {// 静态资源存在System.out.println(静态资源存在);FileUtil.writeFile(file, outputStream);} else {System.out.println(path 对应的该静态资源不存在);}}// 数据写回public void write(String context) throws IOException {outputStream.write(context.getBytes());outputStream.flush();} }FileUtil在这里完成了前端路径到本地资源路径的转化响应头的添加文件输入流转为socket输出流的操作 import java.io.*; import java.nio.file.Files;/*** 该类的主要作用是进行读取文件*/ public class FileUtil {public static boolean writeFile(InputStream inputStream, OutputStream outputStream) {boolean success false;// buffer是缓冲的意思BufferedInputStream bufferedInputStream;BufferedOutputStream bufferedOutputStream;try {bufferedInputStream new BufferedInputStream(inputStream);bufferedOutputStream new BufferedOutputStream(outputStream);// 先写入响应头为Content-Type:text/html// Http/1.1 200 \r\nContent-Type:text/html \r\n\r\nbufferedOutputStream.write(ResponseUtil.htmlResponseHeader.getBytes());int count 0;while (count 0) {count inputStream.available();}int fileSize inputStream.available();long written 0;int beteSize 1024;byte[] bytes new byte[beteSize];while (written fileSize) {if (written beteSize fileSize) {beteSize (int) (fileSize - written);bytes new byte[beteSize];}bufferedInputStream.read(bytes);bufferedOutputStream.write(bytes);bufferedOutputStream.flush();written beteSize;}success true;} catch (IOException e) {e.printStackTrace();}return success;}public static boolean writeFile(File file, OutputStream outputStream) throws Exception {return writeFile(Files.newInputStream(file.toPath()), outputStream);}/*** 获取资源地址** param path* return*/public static String getResoucePath(String path) {String resource FileUtil.class.getResource(/).getPath();return resource \\ path;} } 我们启动项目在浏览器访问localhost:8666/index.html时 !DOCTYPE html html langen headmeta charsetUTF-8titleTitle/title /head bodypHello TomcatDemo!!!/p /body /html控制台输出 至此完成了socket通信tomcat静态资源获取的仿写
http://www.hkea.cn/news/14441443/

相关文章:

  • 济南定制网站建设怎么在线上推广自己的产品
  • 专门做中式的设计网站wordpress wdone
  • 怎么上传网站在服务器上部署网站
  • 郴州企业网站建设郑州新闻发布
  • 台州外贸网站建设申请域名后怎么建设网站
  • 哈尔滨网站建立公司在俄罗斯用钱让女性做h事情的网站
  • 找人做网站都需要提供什么优购物官方网上商城
  • 百盛联合建设集团网站设计软件cad
  • 思坎普网站建设seo关键词排名优化
  • 外贸建站模板价格网易企业邮箱忘记密码
  • 五路居网站建设自助建网站工具
  • 怎么看别人网站是哪里做的wordpress 遍历 子页面
  • 哈尔滨网站建设的公司哪家好贝智康积分网站开发
  • 九江集团网站建设公司经典重庆网站
  • 万网云服务器怎么上传网站手机软件免费开发公司
  • 做书评的网站有哪些网站建设的流程该怎么确定
  • 河南手机网站设计销售网站
  • 郑州网站推广外包如何伪原创 网站
  • 公众号下载wordpress网站栏目页优化
  • 网站开发专业术语大全百度最怕哪个投诉电话
  • 网站内部搜索怎么做南阳网站推广优化公司
  • 扬州做网站多少钱重庆做网站电话
  • 枣阳网站开发三河市建设局网站
  • 微信h5制作网站开发比较漂亮的营销型网站
  • 做论坛网站前段用什么框架好点网站维护一次一般要多久
  • 宁波网站优化公司哪家好常德网站建设哪家权威
  • 无锡地区做网站网站原创文章规范
  • 做建材上哪个网站比较好东莞医院网站建设
  • 上海网站建设的企业豫港大厦 做网站
  • 杭州网站seo大型网站 div