TCP通信实战:模拟BS系统

编程入门 行业动态 更新时间:2024-10-28 08:18:17

TCP通信<a href=https://www.elefans.com/category/jswz/34/1769775.html style=实战:模拟BS系统"/>

TCP通信实战:模拟BS系统

1、之前的客户端都是什么样的

  • 其实就是CS架构,客户端是需要我们自己开发实现的

2、BS结构是什么样的,需要开发客户端吗?

  • 浏览器访问服务端,不需要开发客户端

注意:服务端必须给浏览器响应HTTP协议格式的数据,否则浏览器不识别

 

package com.csdn.d10_bs;import java.io.IOException;
import java.io.PrintStream;
import java.ServerSocket;
import java.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.ServerSocket;
import java.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 协议

更多推荐

TCP通信实战:模拟BS系统

本文发布于:2023-12-06 16:47:15,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1668193.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:实战   通信   系统   TCP   BS

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!