当前位置:首页 > 编程笔记 > 正文
已解决

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 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!