前言

我们用过许多web服务器(Tomcat,Apache,WebLogic…)其实他们是功能很强大的socket服务,当我们在浏览器地址栏输入对应的IP地址,其实也就是浏览器创建了一个socket连接。那么服务端能否响应一段文字呢?


实现的功能

在浏览器地址栏输入:http://localhost:8888/index.html返回对应页面,如果没有就返回404,服务端用java编写的ServerSocket完成,并获取浏览器请求的内容。通过流,根据请求的路径,读取相应的html文件,并返回给浏览器。



实现代码

package com.test;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/*** @Author: cxx* @Date: 2018/6/20 15:20*/
public class ServerTest {private static int port = 8888;private static Socket accept;private static ServerSocket socket;private static BufferedWriter bw;public static void main(String[] args) throws Exception {socket = new ServerSocket(port);System.out.println("服务器开启,等待连接....");while (true){accept = socket.accept();InputStreamReader r = new InputStreamReader(accept.getInputStream());System.out.println("浏览器请求成功!");BufferedReader br = new BufferedReader(r);String readLine = br.readLine();System.out.println("---------------------");//打印请求消息String filePath="log";int i=0;while(readLine != null && !readLine.equals("")){System.out.println(readLine);if (i==0){String[] split = readLine.split(" ");if (split[1].endsWith("html")) {filePath += split[1];}}i++;readLine=br.readLine();}System.out.println("----------------------");//发送响应请求System.out.println(filePath);writeHtml(filePath);}}public static void writeHtml(String filePath) throws Exception{if (!"log/index.html".equals(filePath)){filePath="log/404.html";}FileInputStream fis = new FileInputStream(filePath);int len=0;byte[] b = new byte[1024];StringBuilder sb = new StringBuilder();//拼装http响应的数据格式sb.append("http/1.1 200 ok").append("\n\n");while ((len=fis.read(b))!=-1){sb.append(new String(b,0,len));}bw = new BufferedWriter(new OutputStreamWriter(accept.getOutputStream()));bw.write(sb.toString());bw.flush();bw.close();}
}

注意

浏览器每次发起请求,都会同时请求一次favicon.ico(本次不讨论浏览器缓存了favicon.ico)。

浏览器请求成功!
---------------------
GET /index.html HTTP/1.1
Host: localhost:8888
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
----------------------
log/index.html
浏览器请求成功!
---------------------
GET /favicon.ico HTTP/1.1
Host: localhost:8888
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36
Accept: image/webp,image/apng,image/*,*/*;q=0.8
Referer: http://localhost:8888/index.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
----------------------
log
浏览器请求成功!

代码实现-浏览器访问socket服务(简单)相关推荐

  1. Android之解决PC浏览器访问手机服务端取assets目录下的文件页面显示不出来问题

    1 问题 我在手机里面写了Java socket服务,然后把前端的图片和css和js的文件放到了安卓项目的 assets目录,然后浏览器访问服务,我会把 assets目录下的文件读出来,然后用Data ...

  2. Linux搭建FTP,并使用Windows和IE浏览器访问FTP服务

    一. FTP详解 FTP(File Transfer Protocol):文件传输协议 目的:共享文件 作用:提供各主机之间文件共享服务,可以应用在互联网中,实现外地登陆服务器下载公司文件功能,不区分 ...

  3. 使用浏览器访问Socket服务器

    在了解了如何使用Socket传输文件后,我们来看看,浏览器是如何向服务器发起请求的 ,我们现在打开浏览器,输入http://localhost:8080或是http://127.0.0.1:8080/ ...

  4. macos big sur安装php扩展_用PHP构建基于swoole扩展的socket服务(附PHP扩展安装步骤)...

    最近公司的一项目中,需要用PHP搭建一个socket服务. 本来PHP是不适合做服务的,因为和第三方合作,需要采用高效而稳定的TCP协议进行数据通信.经过多次尝试,最终选择了开源的PHP扩展:swoo ...

  5. Java中利用socket实现简单的服务端与客户端的通信(中级)——实现任意双向通信

    本文计划采用socket实现客户端和服务端的任意双向通信,即客户端可以随时给服务端发消息,服务端也可以随时给客户端发消息,最终结果就是一个类似与QQ的聊天软件的功能. 以下代码可以直接拷贝到Eclip ...

  6. Java中利用socket实现简单的服务端与客户端的通信(基础级)

    在上一篇文章中,简单的介绍了java中入门级的socket编程,简单的实现了客户端像服务器端发送数据,服务器端将数据接收并显示在控制台,没有涉及多线程.上一篇文章的链接:Java中利用socket实现 ...

  7. Java中利用socket实现简单的服务端与客户端的通信(入门级)

    Java编程中,要想要使用网络通信,就离不开Socket编程,在此对socket进行简单的介绍.首先声明,这是一个入门级的介绍,仅仅简单的实现了客户端向服务端发送数据,服务端正常的接收数据,当接收到特 ...

  8. 网页会屏蔽php代码,网站屏蔽360浏览器访问php源码js代码

    靠做流氓软件起家的360董事长周鸿祎早就名声在外,做人不能太周鸿祎!已经成为互联网一句口头禅! 周鸿祎可谓树敌无数,从3721时期与CNNIC的宿怨.离开雅虎后与阿里巴巴的官司,到杀毒软件领域与金山. ...

  9. Python 最简单的我的第一个聊天室QQ软件【基于Socket服务】

    文章目录 什么是Socket Python for socket 最简单程序通讯 基本函数介绍 MyChat 原理解释 服务端 原理 代码 客户端 原理 代码 使用介绍 全局代码 什么是Socket ...

最新文章

  1. 继LSTM之父用世界模型来模拟2D赛车后,谷歌又推出全新世界模型助力导航:360度无死角,就问你怕了没?...
  2. Spring之DAO二
  3. 歌一定要带监听耳机吗_在演唱会上,歌手耳朵里戴的不是“耳机”,而是这个东西...
  4. ABP入门系列(11)——编写单元测试
  5. 创建mysql的表怎么显示00_Mysql sql_mode设置 timestamp default 0000-00-00 00:00:00 创建表失败处理...
  6. 论文浅尝 | 基于知识库的自然语言理解 03#
  7. 终端到服务器丢包,服务器丢包 ping的时候产生丢包的解决方法
  8. qq头像计算机系,QQ头像
  9. 第五章 基于时序差分和Q学习的无模型预测与控制-强化学习理论学习与代码实现(强化学习导论第二版)
  10. Python中的strip(),lstrip(),rstrip()的用法
  11. php redis 里面的hscan 第四个参数count很不靠谱
  12. ucos II 操作系统
  13. ApacheCN 活动汇总 2019.7.19
  14. 如何查看华为android系统,如何查看华为手机系统更新的新增功能
  15. 黑客比程序员高在哪里?
  16. 第十四周练兵区——编程题——不计入总分
  17. QNX Screen---Blit
  18. java hypot_Java Math类静态double hypot(double d1,double d2)与示例
  19. 矩阵运算------矩阵平移与伸缩
  20. 驾驭你的“职场布朗运动” .

热门文章

  1. 微信小程序tab导航+滚动顶部吸附效果(开发实例)
  2. 恒烁M0+系列CX32L003单片机定时器控制LED亮灭
  3. excel 查找两列的共同元素
  4. 机械加工行业云MES解决方案
  5. php红白黑三球_)在一个PPT演示文稿的一页幻灯片中,有两个图片文件,其中图片1把图片2覆盖住了,若要设置为图片2覆盖住图片1,以下最优的操作方法是( )...
  6. 前端最常用的几个线上设计网站
  7. Word里面进行了替换操作文档却没有任何反应
  8. python中的复数计算
  9. ###pdf转化为图片###
  10. jaccard相似度 java_Jaccard相似度