fjl123 8 months ago
parent
commit
e6960288a2

+ 43 - 0
src/main/java/com/sf/day31/_01_tcp/Client.java

@@ -0,0 +1,43 @@
+package com.sf.day31._01_tcp;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.Socket;
+import java.util.Scanner;
+
+public class Client {
+
+    public static void main(String[] args) throws IOException {
+//        1 创建一个连接某个服务Socket对象
+        /**
+         * 第一个参数:ip 地址
+         * 第二个参数:端口号
+         * localhost: 本机ip
+         */
+        while (true){
+            Scanner scanner = new Scanner(System.in);
+            String msg = scanner.next();
+            Socket socket = new Socket("localhost",10086);
+//        2 从Socket中拿到输出流服务端发送数据
+            OutputStream outputStream = socket.getOutputStream();
+            outputStream.write(("范佳龙:"+msg).getBytes("UTF-8"));
+//        3 调用Socket对象shutdownOutput 方法通知服务端数据发送完毕
+            socket.shutdownOutput();
+//        4 从Socket中拿到输入流获取服务端回馈的数据
+            InputStream inputStream = socket.getInputStream();
+            byte[] buffer = new byte[1024];
+            int len = -1;
+            while ((len = inputStream.read(buffer))!=-1){
+                System.out.println(new String(buffer,0,len));
+            }
+//        5 调用Socket对象shutdownInput方法通知服务端数据收集完毕
+            socket.shutdownInput();
+//        6 关闭Socket对象
+            socket.close();
+            inputStream.close();
+            outputStream.close();
+        }
+
+    }
+}

+ 42 - 0
src/main/java/com/sf/day31/_01_tcp/Server.java

@@ -0,0 +1,42 @@
+package com.sf.day31._01_tcp;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.util.Scanner;
+
+public class Server {
+    // 思考: 现在我们服务端接受一次请求就结束了,我想要效果是可以一直接受请求
+    // 改造1: 服务端代码要一直运行,可以接受多个请求的信息
+    public static void main(String[] args) throws IOException {
+//        1:创建一个服务端对象(ServerSocket)
+
+        ServerSocket serverSocket = new ServerSocket(10086);
+//        2:侦听客户端的连接,获取和客户端通信的Socket对象
+        while (true){
+            Socket accept = serverSocket.accept();
+//        3:从Socket获取输入流,接收服务器发送的数据
+            InputStream inputStream = accept.getInputStream();
+            byte[] buffer = new byte[1024];
+            int len = -1;
+            while ((len = inputStream.read(buffer))!=-1){
+                System.out.println(new String(buffer,0,len));
+            }
+//        4:调用Socket对象对象shutdownInput方法通知客户端数据接收完毕
+            accept.shutdownInput();
+//        5:从Socket中拿到输出流往客户端发送数据
+            Scanner scanner = new Scanner(System.in);
+            String msg = scanner.next();
+            OutputStream outputStream = accept.getOutputStream();
+//        6:调用Socket对象对象shutdownOutput方法通知客户端数据发送完毕
+            outputStream.write(("迪丽热巴:"+msg).getBytes("UTF-8"));
+//        7:关闭Socket对象
+            accept.close();
+            inputStream.close();
+            outputStream.close();
+        }
+
+    }
+}

+ 35 - 0
src/main/java/com/sf/day31/_02_chat/Client.java

@@ -0,0 +1,35 @@
+package com.sf.day31._02_chat;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.Socket;
+import java.util.Scanner;
+
+public class Client {
+
+    public static void main(String[] args) throws IOException {
+        while (true){
+            Scanner scanner = new Scanner(System.in);
+            String msg = scanner.next();
+//        1 创建一个连接某个服务Socke对象
+            Socket socket = new Socket("localhost",10086);
+//        2 从Socket中拿到输出流服务端发送数据
+            OutputStream outputStream = socket.getOutputStream();
+            outputStream.write(("范佳龙:"+msg).getBytes("UTF-8"));
+//        3 调用Socket对象shutdownOutput 方法通知服务端数据发送完毕
+            socket.shutdownOutput();
+//        4 从Socket中拿到输入流获取服务端回馈的数据
+            InputStream inputStream = socket.getInputStream();
+            byte[] buffer = new byte[1024];
+            int len = -1;
+            while ((len = inputStream.read(buffer))!=-1){
+                System.out.println(new String(buffer,0,len));
+            }
+//        5 调用Socket对象shutdownInput方法通知服务端数据收集完毕
+            socket.shutdownInput();
+//        6 关闭Socket对象
+            socket.close();
+        }
+    }
+}

+ 39 - 0
src/main/java/com/sf/day31/_02_chat/Server.java

@@ -0,0 +1,39 @@
+package com.sf.day31._02_chat;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.util.Scanner;
+
+public class Server {
+
+    public static void main(String[] args) throws IOException {
+//        1:创建一个服务端对象(ServerSocket)
+        ServerSocket serverSocket = new ServerSocket(10086);
+//        2:侦听客户端的连接,获取和客户端通信的Socket对象
+        while (true){
+            Socket socket = serverSocket.accept();
+//        3:从Socket获取输入流,接收服务器发送的数据
+            InputStream inputStream = socket.getInputStream();
+            byte[] buffer = new byte[1024];
+            int len = -1;
+            while ((len = inputStream.read(buffer))!=-1){
+                System.out.println(new String(buffer,0,len));
+            }
+//        4:调用Socket对象对象shutdownInput方法通知客户端数据接收完毕
+//        5:从Socket中拿到输出流往客户端发送数据
+            Scanner scanner = new Scanner(System.in);
+            String msg = scanner.next();
+            OutputStream outputStream = socket.getOutputStream();
+            outputStream.write(("迪丽热巴:"+msg ).getBytes("UTF-8"));
+//        3 调用Socket对象shutdownOutput 方法通知服务端数据发送完毕
+            socket.shutdownOutput();
+//        6:调用Socket对象对象shutdownOutput方法通知客户端数据发送完毕
+//        7:关闭Socket对象
+            socket.close();
+        }
+
+    }
+}

+ 56 - 0
src/main/java/com/sf/day31/_03_mock_tomcat/Server.java

@@ -0,0 +1,56 @@
+package com.sf.day31._03_mock_tomcat;
+
+import java.io.*;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+public class Server {
+
+    public static void main(String[] args) throws IOException {
+//        1:创建一个服务端对象(ServerSocket)
+        ServerSocket serverSocket = new ServerSocket(10086);
+//        2:侦听客户端的连接,获取和客户端通信的Socket对象
+        while (true){
+            Socket socket = serverSocket.accept();
+//        3:从Socket获取输入流,接收服务器发送的数据
+            // 问题其实就是在读取请求头当中信息 , 读的时候现在while 循环当中出不来了,
+            // 问题就是读取请求头当中信息的时候他读取完以后其实是有一个空串 这个空转不等于-1 ,  就认为没有读取完一直在while 中出不来
+            // 解决思路: 我们可以使用字符缓冲流 一行一行读取, 当读取最后一行时候是空串  我们直接停止循环就可以正常响应了
+            InputStream inputStream = socket.getInputStream();
+            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+
+            byte[] buffer = new byte[1024];
+            String str = "";
+            while ((str = bufferedReader.readLine())!=null){
+                if(str.equals("")){
+                    break;
+                }
+                System.out.println(str);
+            }
+//        4:调用Socket对象对象shutdownInput方法通知客户端数据接收完毕
+//        5:从Socket中拿到输出流往客户端发送数据
+            // 问题:我们使用outputsteam 去给浏览器去响应数据发现数据没有在浏览器中展示出来
+            // 原因: 是因为浏览器对于响应数据和格式是有要求的,我们必须要按照浏览器的数据格式进行响应才可以
+            // 浏览器在响应的时候必要要求服务器返回 HTTP/1.1 200 OK 协议
+            // Content-Type: text/html; charset=utf-8  响应数据格式  如果你没有这个响应头,
+            // 浏览器的渲染引擎就无法渲染你返回的代码, 很明显我们现在没有给他返回状态码, 也没有给他返回数据格式
+            // 解决: 想办法给他响应指定的数据格式
+
+            OutputStream outputStream = socket.getOutputStream();
+            // 想要响应的数据是一行一行的
+            PrintStream printStream = new PrintStream(outputStream);
+            // 这个方法可以让我们在输出的时候自动换行
+            printStream.println("HTTP/1.1 200 OK");     // 响应状态码和协议
+            printStream.println("Content-Type: text/html; charset=utf-8");   //响应数据格式,浏览器根据响应数据格式进行渲染
+            printStream.println("");                   // 在我们响应的内容和响应头信息中间要留一行
+            printStream.println(("<html><head><title>123</title></head><body>123123</body></html>"));
+            printStream.flush();                       // 开始渲染我们返回html代码
+//        3 调用Socket对象shutdownOutput 方法通知服务端数据发送完毕
+            socket.shutdownOutput();
+//        6:调用Socket对象对象shutdownOutput方法通知客户端数据发送完毕
+//        7:关闭Socket对象
+            socket.close();
+        }
+
+    }
+}

+ 25 - 0
src/main/java/com/sf/day31/_04_js/01-js引入方式.html

@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+    <script src="JSUtil.js"></script>
+
+</head>
+<body>
+<div id="div">123</div>
+</body>
+<!--在html 当中去写js 有两种方式-->
+<!--第一种方式 直接写在script 标签当中-->
+<!--第二种方式 是单独抽取出来一个JS 的文件 然后在script 标签中src="js 文件的路径"-->
+<script>
+    // JS 当中注释也用//
+    // JS 打印console.log(内容);
+    // 两种方式如何选择 , 一些简单业务逻辑就放在这个script 标签写
+    // 什么时候放在js 文件当中呢?
+    // 1 代码表复杂要写很多js  2 如果多个html 当中都有同一段js代码
+    console.log(123123)
+    // 获取id =div 的元素
+</script>
+
+</html>

+ 49 - 0
src/main/java/com/sf/day31/_04_js/02-JS 的变量.html

@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+
+</body>
+<script>
+    // 定义一个变量 a 值为1
+    var a = 1
+    console.log(a)
+    a = "zhangsan"
+    console.log(a)
+
+    // 在js 当中定义代码块{}
+    {
+        var b = 123
+    }
+    // 使用var 修饰变量是全局的 ,在任何位置都可以访问到
+    console.log(b)
+
+
+    // 使用var 修饰变量可以被重复定义
+    {
+        var c = 1;
+        var c = 2;
+        console.log(c)
+    }
+
+    // 提供let 修饰变量  值在代码块中生效  不允许被重复定义
+    {
+        let d = 1
+        console.log(d)
+    }
+    // console.log(d)
+
+    {
+        // let f = 1
+        // let f = 2
+    }
+
+    // 使用const 修饰的变量是常量 不能被修改   和我们Java当中final 相似
+    const name = "123"
+    // name ="456";
+    console.log(name)
+</script>
+</html>

+ 5 - 0
src/main/java/com/sf/day31/_04_js/JSUtil.js

@@ -0,0 +1,5 @@
+console.log(1)
+console.log(2)
+console.log(3)
+console.log(4)
+console.log(5)

+ 11 - 0
src/main/java/com/sf/day31/login.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+我是登录界面
+
+</body>
+</html>