浏览器发送请求,用Java模拟写个简单的服务器,浏览器可以收到响应。

执行下列代码(设置static final int TEST = 1),

使用浏览器访问:http://127.0.0.1:8888/tigerlion/index.html

服务器会打印如下代码,这就是浏览器请求的内容:

GET /tigerlion/index.html HTTP/1.1

Accept: text/html, application/xhtml+xml, image/jxr, /

Accept-Language: zh-CN

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko

Accept-Encoding: gzip, deflate

Host: 127.0.0.1:8888

Connection: Keep-Alive

第一句反应了请求访问的资源信息,找到响应文件,返回给请求放即可(设置static final int TEST = 0)。

import java.net.*;
import java.io.*;
public class SocketBS {
// 使用IE访问:http://127.0.0.1:8888/tigerlion/index.html
static final int TEST = 1;// 1:输出请求内容/其它:接受请求并响应
public static void main(String[] args) {
try {
ServerSocket sSocket = new ServerSocket(8888);
while (true) {
System.out.println("accept:");
Socket s = sSocket.accept();
InputStream ips = s.getInputStream();
if (TEST == 1) {
// 测试请求内容
byte[] b = new byte[1024];
ips.read(b);
System.out.println(new String(b));
} else {
// 使用缓冲流,读取一行,并进行解析
BufferedReader br = new BufferedReader(new InputStreamReader(ips));
// |--获取首行
String firstLine = br.readLine();
// |--按空格分割
String[] request = firstLine.split(" ");
// |--0是GET,1是路径
String requestPage = request[1];
System.out.println("用户请求的资源是:" + requestPage);
// 根据用户请求的资源,找到服务器上的文件,发送给用户
OutputStream os = s.getOutputStream();
// HTML协议响应头(固定写法)
os.write("HTTP/1.1 200 OK\r\n".getBytes());
os.write("Content-TYpe:text/html\r\n".getBytes());
os.write("\r\n".getBytes());
// 写网页(应该是从服务器上读文件并写入,此处简化)
os.write("<HTML><a href='https://zhuanlan.zhihu.com/hulaoshi'>Story of Computer</a></HTML>"
.getBytes());
os.close();
br.close();
}
ips.close();
s.close();
}
// sSocket.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("服务器端,OVER");
}
}
}

最新文章

  1. angularjs中 *.min.js.map 404的问题
  2. MFC学习 标签页与属性页及各常用控件使用
  3. JS函数式编程【译】2.3 函数式程序员的工具集
  4. Javasript中Date日期常用用法(正则、比较)
  5. IT项目量化管理:细化、量化与图形化 与 中国IT项目实施困惑
  6. python模块之bsddb: bdb高性能嵌入式数据库 1.基础知识
  7. 详解HashMap的内部工作原理
  8. Oracle EBS-SQL (SYS-3):sys_人员用户名对应关系查询.sql
  9. RMA编码为必输
  10. HTML5 实现图像模糊算法
  11. 敏捷开发(七)- SCRUM评估会议
  12. js&#39;初学笔记
  13. 用lua+redis实现一个简单的计数器功能 (一)
  14. Java中调用文件中所有bat脚本
  15. NDK编程的一个坑—Arm平台下的类型转换
  16. C类网络子网掩码速查
  17. 聊聊JVM(二)说说GC的一些常见概念
  18. react-native中的state
  19. kbmmw中向服务器端传递对象的一种简单方式
  20. C#基础知识回顾-- 反射(4)

热门文章

  1. 完美解决CentOS8 yum安装AppStream报错,更新yum后无法makecache的问题
  2. LWJGL3的内存管理,第二篇,栈上分配
  3. 简单谈谈Hilt——依赖注入框架
  4. ubuntu下安装nginx -php
  5. Node.js 搞Javascript开发的无论如何要尝试一下
  6. 使用Selenium爬取京东电商数据(以手机商品为例)
  7. 睿象云:为什么 Zabbix 告警如此火热?
  8. jsp 和servlet基础知识
  9. 处理Ceph osd的journal的uuid问题
  10. ios、安卓前端兼容性1