已解决
TCP通信实战:模拟BS系统
来自网友在路上 153853提问 提问时间:2023-10-21 06:34:02阅读次数: 53
最佳答案 问答题库538位专家为你答疑解惑
1、之前的客户端都是什么样的
- 其实就是CS架构,客户端是需要我们自己开发实现的
2、BS结构是什么样的,需要开发客户端吗?
- 浏览器访问服务端,不需要开发客户端
注意:服务端必须给浏览器响应HTTP协议格式的数据,否则浏览器不识别
package com.csdn.d10_bs;import java.io.IOException; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket;public class BSserverDemo {public static void main(String[] args) {try {//1.注册端口ServerSocket ss = new ServerSocket(8080);//2.创建一个循环接收多个客户端的请求while (true) {Socket socket = ss.accept();//3.交给一个独立的线程来处理!new ServerReaderThread(socket).start();}} catch (IOException e) {throw new RuntimeException(e);}} } class ServerReaderThread extends Thread {private Socket socket;public ServerReaderThread(Socket socket) {this.socket = socket;}@Overridepublic void run() {try {//浏览器 已经与本线程建立了Socket管道//响应消息给浏览器显示PrintStream ps = new PrintStream(socket.getOutputStream());//必须响应HTTP协议格式数据,否则浏览器不认识消息ps.println("HTTP/1.1 200 OK");//协议类型和版本 响应成功的消息!ps.println("Content-Type:text/html;charset=UTF-8");ps.println();//必须发送一个空行//才可以响应数据回去给浏览器ps.println("<span style='color:red;font-size:90px'>CSDN</span>");ps.close();} catch (IOException e) {throw new RuntimeException(e);}} }
3、基于线程池BS架构
package com.csdn.d10_bs;import java.io.IOException; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.*;public class BSserverDemo {//使用静态变量记住一个线程池对象private static ExecutorService pool = new ThreadPoolExecutor(3,5, 6, TimeUnit.SECONDS,new ArrayBlockingQueue<>(2),Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());public static void main(String[] args) {try {//1.注册端口ServerSocket ss = new ServerSocket(8080);//2.创建一个循环接收多个客户端的请求while (true) {Socket socket = ss.accept();//3.交给一个独立的线程来处理!pool.execute(new ServerReaderRunnable(socket));}} catch (IOException e) {throw new RuntimeException(e);}} }class ServerReaderRunnable implements Runnable {private Socket socket;public ServerReaderRunnable(Socket socket) {this.socket = socket;}@Overridepublic void run() {try {//浏览器 已经与本线程建立了Socket管道//响应消息给浏览器显示PrintStream ps = new PrintStream(socket.getOutputStream());//必须响应HTTP协议格式数据,否则浏览器不认识消息ps.println("HTTP/1.1 200 OK");//协议类型和版本 响应成功的消息!ps.println("Content-Type:text/html;charset=UTF-8");ps.println();//必须发送一个空行//才可以响应数据回去给浏览器ps.println("<span style='color:red;font-size:90px'>CSDN</span>");ps.close();} catch (IOException e) {throw new RuntimeException(e);}} }
4、TCP通信如何实现BS请求网页信息回来呢?
- 客户端使用浏览器发起请求(不需要开发客户端)
- 服务端必须按照浏览器的协议规则响应数据
- 浏览器使用什么协议规则呢? 是 HTTP 协议
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"TCP通信实战:模拟BS系统":http://eshow365.cn/6-20719-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 机器学习 | 基于随机森林的可解释性机器学习
- 下一篇: 【React】高频面试题