自学内容网 自学内容网

JAVASE进阶day14(网络编程续TCP,日志)

TCP

三次握手

四次挥手

package com.lu.day14.tcp;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class Client {
    public static void main(String[] args) {
        try(Socket socket = new Socket("192.168.32.224",9999);){
            OutputStream outputStream = socket.getOutputStream();
            String s = """
                                                                                                        _ooOoo_
                                                                                                       o8888888o
                                                                                                       88" . "88
                                                                                                       (| -_- |)
                                                                                                       O\\  =  /O
                                                                                                    ____/`---'\\____
                                                                                                  .'  \\\\|     |//  `.
                                                                                                 /  \\\\|||  :  |||//  \\
                                                                                                /  _||||| -:- |||||-  \\
                                                                                                |   | \\\\\\  -  /// |   |
                                                                                                | \\_|  ''\\---/''  |   |
                                                                                                \\  .-\\__  `-`  ___/-. /
                                                                                              ___`. .'  /--.--\\  `. . __
                                                                                           ."" '<  `.___\\_<|>_/___.'  >'"".
                                                                                          | | :  `- \\`.;`\\ _ /`;.`/ - ` : | |
                                                                                          \\  \\ `-.   \\_ __\\ /__ _/   .-` /  /
                                                                                     ======`-.____`-.___\\_____/___.-`____.-'======
                                                                                                        `=---='
                                                                                                    """;
            outputStream.write(s.getBytes());
            InputStream inputStream = socket.getInputStream();
            byte[] bytes = new byte[1024];
            int read;
            while ((read = inputStream.read(bytes)) != -1) {
                System.out.println(new String(bytes,0,read));
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}
package com.lu.day14.tcp;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) {
        try(ServerSocket serverSocket = new ServerSocket(9999);){
            while (true) {
                System.out.println("等待客户端连接");
                Socket accept = serverSocket.accept();
                InputStream inputStream = accept.getInputStream();
                byte[] bytes = new byte[1024];
                int read;
                while ((read = inputStream.read(bytes)) != -1){
                    System.out.println(new String(bytes,0,read));
                }
                OutputStream outputStream = accept.getOutputStream();
                outputStream.write("你".getBytes());
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}
package com.lu.day14.tcp;

import java.io.IOException;
import java.net.ServerSocket;
import java.util.ArrayList;

/**
 * 查看自己哪个端口号被占用
 */
public class Test {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        for (int i = 0; i < 65535; i++) {
            try {
                ServerSocket serverSocket = new ServerSocket(i);
            } catch (IOException e) {
                System.out.println(i);
            }
        }

    }
}

日志 

1.为什么引入日志技术?

2.日志技术与普通输出语句的区别

3.特点

4.日志体系 

 jar包是一种文件类型并且是一种压缩文件类型(类似与.zip .rar) 全程java archive (java归档文件)->压缩了很多.class文件

5.LogBack

默认是debug模式 

package com.lu.day14.log;


import com.lu.day07.test.Student;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LogBackLevel {
    private static final Logger LOG = LoggerFactory.getLogger(LogBackLevel.class);
    public static void main(String[] args) {
        //1.trace追踪级别
        LOG.trace("trace");
        Student lu = new Student("lu", 100, 100, 100);
        //logback可以使用大括号作为对象输出的占位符
        LOG.trace("学生信息{}", lu);

        //2.debug调试级别->在使用编程工具(idea)debug模式时,输出log应该debug
        LOG.debug("debug");

        //3.info信息级别->就相当于sout
        LOG.info("info");

        //4.warn警告级别->一般用于警告用户
        LOG.warn("warn");

        //5.error错误级别->一般用于错误信息,经常用在异常处理中catch中
        LOG.error("error");

        //6.fatal致命级别->一般用于系统崩溃,没有对应的方法


    }
}

resource/logback.xml会自动识别 这个xml配置文件网上会有可以搜一下(实现原理是多线程加IO)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--
        CONSOLE :表示当前的日志信息是可以输出到控制台的。
    -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--输出流对象 默认 System.out 改为 System.err-->
        <target>System.out</target>
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度
                %msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level]  %c [%thread] : %msg%n</pattern>
        </encoder>
    </appender>

    <!-- File是输出的方向通向文件的 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!--日志输出路径-->
        <file>C:/code/itheima-data.log</file>
        <!--指定日志文件拆分和压缩规则-->
        <rollingPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--通过指定压缩文件名称,来确定分割文件方式-->
            <fileNamePattern>C:/code/itheima-data2-%d{yyyy-MMdd}.log%i.gz</fileNamePattern>
            <!--文件拆分大小-->
            <maxFileSize>1MB</maxFileSize>
        </rollingPolicy>
    </appender>

    <!--

    level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF
   , 默认debug
    <root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。
    -->
    <root level="DEBUG">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE" />
    </root>
</configuration>


原文地址:https://blog.csdn.net/qq_65095414/article/details/140566204

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!