Java学习日记——DAY23

今天我针对Java网络编程展开了学习,学习内容如下:

1.OSI(开放式系统互连)七层模型:

物理层:传输原始二进制比特流,常见设备如:双绞线、光纤、集线器、中继器;

数据链路层:在同一局域网内提供可靠的数据帧传输,处理物理地址,差错检验;

网络层:负责逻辑寻址和路由选择(决定数据包如何从源目的跨网络传输),IP;

传输层:提供端到端的可靠或不可靠传输、负责流量控制、错误检测与恢复,UDP、TCP;

会话层:建立管理和终止对话;

表示层:完成数据的格式转换、加密解密、压缩解压(确保不同系统间能理解数据);

应用层:为用户提供网络服务接口;

2.TCP/IP
指能够在多个不同网络间实现信息传输的协议簇。TCP/IP不仅指TCP和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇。对互联网中各部分进行通信的标准和方法进行规定。是保证网络数据信息及时、完整传的重要协议。
TCP/IP是一个四层的体系结构:应用层+传输层+网络层+物理、数据链路层;
3.传输层协议:
UDP协议:一个无连接的传输协议,称为用户数据报协议,无需建立连接就可以发送封装IP数据包的方法;
协作比较简单,实现容易,但是没有确认机制,无法确认到对方是否收到,可靠性较差,但效率比较高,包含报头数据最大长度为64K;
TCP协议:是面向连接的、可靠的、基于字节流的通信协议。是一种有确认机制的协议,每发出一个数据包都要求确认,如果有一个数据包丢失,接收方不会进行确认,发送方就必须要重新发送这个数据包。
TCP的三次协议:
主要为了确认四件事:客户端的发送正常,客户端的接收正常,服务端的发送正常,客户端的接收正常;
第一次握手:客户端提出的,可以理解为客户端向服务端发出一个短信,服务端接收后确定了服务端的接收功能正常;
第二次握手:服务端提出的,可以理解为服务端向客户端发出一个短信,客户端接收后确定了客户端的接收和发送能力正常;
第三次握手:客户端提出的,可以理解为客户端向服务端发出一个短信,服务端接收后确定了服务端的发送能力正常;
4.网络编程三要素:
(1)协议:计算机网络为了进行数据交换而建立的各种规则,标准或约定的集合;
(2)IP地址:互联网协议地址;
(3)端口号:用于确定某一计算机的具体服务;
5.网络开发的两种模式:
C/S模式:客户端/服务器模式,合理分配任务给客户端和服务端,降低了系统的通讯开销,充分利用两端硬件环境优势;
B/S模式:浏览器/服务器模式,将系统核心全部集中到服务器上,简化系统开发维护和使用;
6.Socket套接字

基于TCP实现聊天服务:

java 复制代码
public class Test1 {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(1235);
        System.out.println("等待客户端连接中...");
        Socket socket = serverSocket.accept();
        System.out.println("成功连接客户端...");
        OutputStream outputStream = socket.getOutputStream();
        PrintWriter printWriter = new PrintWriter(outputStream);
        Scanner scanner = new Scanner(System.in);
        InputStreamReader inputStreamReader = new InputStreamReader(socket.getInputStream());
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        System.out.println("请输入内容:");
        String line;
        while(true){
            line = scanner.nextLine();
            printWriter.println(line);
            printWriter.flush();
            if("bye".equals(line)){
                break;
            }
            line = bufferedReader.readLine();
            System.out.println("[客户端]:"+line);
            if("bye".equals(line)){
                break;
            }
        }
        bufferedReader.close();
        printWriter.close();
        socket.close();
        serverSocket.close();

    }
}
public class Test2 {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost",1235);
        System.out.println("客户端连接");
        InputStream is = socket.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        OutputStream os = socket.getOutputStream();
        PrintWriter pw = new PrintWriter(os);
        Scanner sc = new Scanner(System.in);
        while(true){
            String line = br.readLine();
            System.out.println("[服务端]:"+line);
            if("bye".equals(line)){
                break;
            }
            line = sc.nextLine();
            pw.println(line);
            pw.flush();
            if("bye".equals(line)){
                break;
            }
        }
        br.close();
        pw.close();
        socket.close();
    }
}

基于UDP实现消息快报:

java 复制代码
public class Test5 {
    public static void main(String[] args) throws IOException {
        DatagramSocket socket = new DatagramSocket(1234);
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        byte[] data = str.getBytes();
        DatagramPacket packet =new DatagramPacket(data,0,data.length, InetAddress.getByName("localhost"),1235);
        socket.send(packet);
        socket.close();
    }
}
public class Test6 {
    public static void main(String[] args) throws IOException {
        DatagramSocket socket = new DatagramSocket(1235);
        byte[] buf = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);
        socket.receive(packet);
        String data = new String(buf, 0, packet.getLength(), StandardCharsets.UTF_8);
        System.out.println(data);
        socket.close();
    }
}

URL同一资源定位符:

java 复制代码
public class Test7 {
    public static void main(String[] args) throws IOException {
        URL url = new URL("https://inews.gtimg.com/om_bt/Ojkpad4ytS_JDeu___pZIxZ50fz1ISSAl4AH6PShWSFmYAA/641");
        URLConnection con = url.openConnection();
        BufferedInputStream bis = new BufferedInputStream(con.getInputStream());
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("tu.jpg"));
        byte[] buf = new byte[1024];
        int len;
        while((len = bis.read(buf)) != -1) {
            bos.write(buf, 0, len);
        }
        bos.flush();
        bos.close();
        bis.close();
    }
}public class Test8 {
    public static void main(String[] args) throws IOException {
        URL url = new URL("https://news.qq.com/rain/a/20260211A0306900");
        URLConnection conn = url.openConnection();
        BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("tu.html"));
        byte[] buf = new byte[1024];
        int len;
        while ((len = bis.read(buf)) != -1) {
            bos.write(buf, 0, len);
        }
        bos.flush();
        bos.close();
        bis.close();
    }
}

学习内容如上,如有错误或者意见请评论讨论。

相关推荐
西岸行者7 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意8 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码8 天前
嵌入式学习路线
学习
毛小茛8 天前
计算机系统概论——校验码
学习
babe小鑫8 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms8 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下8 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。8 天前
2026.2.25监控学习
学习
im_AMBER8 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J8 天前
从“Hello World“ 开始 C++
c语言·c++·学习