代码实现-浏览器访问socket服务(简单)
前言
我们用过许多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服务(简单)相关推荐
- Android之解决PC浏览器访问手机服务端取assets目录下的文件页面显示不出来问题
1 问题 我在手机里面写了Java socket服务,然后把前端的图片和css和js的文件放到了安卓项目的 assets目录,然后浏览器访问服务,我会把 assets目录下的文件读出来,然后用Data ...
- Linux搭建FTP,并使用Windows和IE浏览器访问FTP服务
一. FTP详解 FTP(File Transfer Protocol):文件传输协议 目的:共享文件 作用:提供各主机之间文件共享服务,可以应用在互联网中,实现外地登陆服务器下载公司文件功能,不区分 ...
- 使用浏览器访问Socket服务器
在了解了如何使用Socket传输文件后,我们来看看,浏览器是如何向服务器发起请求的 ,我们现在打开浏览器,输入http://localhost:8080或是http://127.0.0.1:8080/ ...
- macos big sur安装php扩展_用PHP构建基于swoole扩展的socket服务(附PHP扩展安装步骤)...
最近公司的一项目中,需要用PHP搭建一个socket服务. 本来PHP是不适合做服务的,因为和第三方合作,需要采用高效而稳定的TCP协议进行数据通信.经过多次尝试,最终选择了开源的PHP扩展:swoo ...
- Java中利用socket实现简单的服务端与客户端的通信(中级)——实现任意双向通信
本文计划采用socket实现客户端和服务端的任意双向通信,即客户端可以随时给服务端发消息,服务端也可以随时给客户端发消息,最终结果就是一个类似与QQ的聊天软件的功能. 以下代码可以直接拷贝到Eclip ...
- Java中利用socket实现简单的服务端与客户端的通信(基础级)
在上一篇文章中,简单的介绍了java中入门级的socket编程,简单的实现了客户端像服务器端发送数据,服务器端将数据接收并显示在控制台,没有涉及多线程.上一篇文章的链接:Java中利用socket实现 ...
- Java中利用socket实现简单的服务端与客户端的通信(入门级)
Java编程中,要想要使用网络通信,就离不开Socket编程,在此对socket进行简单的介绍.首先声明,这是一个入门级的介绍,仅仅简单的实现了客户端向服务端发送数据,服务端正常的接收数据,当接收到特 ...
- 网页会屏蔽php代码,网站屏蔽360浏览器访问php源码js代码
靠做流氓软件起家的360董事长周鸿祎早就名声在外,做人不能太周鸿祎!已经成为互联网一句口头禅! 周鸿祎可谓树敌无数,从3721时期与CNNIC的宿怨.离开雅虎后与阿里巴巴的官司,到杀毒软件领域与金山. ...
- Python 最简单的我的第一个聊天室QQ软件【基于Socket服务】
文章目录 什么是Socket Python for socket 最简单程序通讯 基本函数介绍 MyChat 原理解释 服务端 原理 代码 客户端 原理 代码 使用介绍 全局代码 什么是Socket ...
最新文章
- 继LSTM之父用世界模型来模拟2D赛车后,谷歌又推出全新世界模型助力导航:360度无死角,就问你怕了没?...
- Spring之DAO二
- 歌一定要带监听耳机吗_在演唱会上,歌手耳朵里戴的不是“耳机”,而是这个东西...
- ABP入门系列(11)——编写单元测试
- 创建mysql的表怎么显示00_Mysql sql_mode设置 timestamp default 0000-00-00 00:00:00 创建表失败处理...
- 论文浅尝 | 基于知识库的自然语言理解 03#
- 终端到服务器丢包,服务器丢包 ping的时候产生丢包的解决方法
- qq头像计算机系,QQ头像
- 第五章 基于时序差分和Q学习的无模型预测与控制-强化学习理论学习与代码实现(强化学习导论第二版)
- Python中的strip(),lstrip(),rstrip()的用法
- php redis 里面的hscan 第四个参数count很不靠谱
- ucos II 操作系统
- ApacheCN 活动汇总 2019.7.19
- 如何查看华为android系统,如何查看华为手机系统更新的新增功能
- 黑客比程序员高在哪里?
- 第十四周练兵区——编程题——不计入总分
- QNX Screen---Blit
- java hypot_Java Math类静态double hypot(double d1,double d2)与示例
- 矩阵运算------矩阵平移与伸缩
- 驾驭你的“职场布朗运动” .
热门文章
- 微信小程序tab导航+滚动顶部吸附效果(开发实例)
- 恒烁M0+系列CX32L003单片机定时器控制LED亮灭
- excel 查找两列的共同元素
- 机械加工行业云MES解决方案
- php红白黑三球_)在一个PPT演示文稿的一页幻灯片中,有两个图片文件,其中图片1把图片2覆盖住了,若要设置为图片2覆盖住图片1,以下最优的操作方法是( )...
- 前端最常用的几个线上设计网站
- Word里面进行了替换操作文档却没有任何反应
- python中的复数计算
- ###pdf转化为图片###
- jaccard相似度 java_Jaccard相似度