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();
    }
}

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

相关推荐
今天只学一颗糖8 小时前
1、《深入理解计算机系统》--计算机系统介绍
linux·笔记·学习·系统架构
testpassportcn9 小时前
AWS DOP-C02 認證完整解析|AWS DevOps Engineer Professional 考試
网络·学习·改行学it
游乐码11 小时前
c#变长关键字和参数默认值
学习·c#
饭碗、碗碗香12 小时前
【Python学习笔记】:Python的hashlib算法简明指南:选型、场景与示例
笔记·python·学习
魔力军13 小时前
Rust学习Day4: 所有权、引用和切片介绍
开发语言·学习·rust
wubba lubba dub dub75013 小时前
第三十六周 学习周报
学习
学编程的闹钟14 小时前
PHP字符串表示方式全解析
学习
Lbs_gemini060314 小时前
01-01-01 C++编程知识 C++入门 工具安装
c语言·开发语言·c++·学习·算法
饭碗、碗碗香14 小时前
【Python学习笔记】:Python 加密算法全景指南:原理、对比与工程化选型
笔记·python·学习
麟听科技15 小时前
HarmonyOS 6.0+ APP智能种植监测系统开发实战:农业传感器联动与AI种植指导落地
人工智能·分布式·学习·华为·harmonyos