Java essay Java essay
首页
  • Java基础
  • Java进阶
  • 设计模式
  • 多线程
  • Java你不知道的小事
  • Spring初识
  • Spring进阶
  • SpringBoot基础
  • SpringBoot进阶
  • 什么是微服务
  • SpringCloud全家桶
  • Dubbo
  • SpringCloud Alibaba
  • Vue
  • 小程序
  • 博客搭建
  • 数据库
  • python
  • 大数据
  • 性能分析优化
  • 中间件
  • 云原生
  • 面试
  • 外卖霸王餐
  • 打工人的带饭生活
  • 30岁我该怎么办
友链
关于我
GitHub (opens new window)

Mr.Fire

全栈工程师
首页
  • Java基础
  • Java进阶
  • 设计模式
  • 多线程
  • Java你不知道的小事
  • Spring初识
  • Spring进阶
  • SpringBoot基础
  • SpringBoot进阶
  • 什么是微服务
  • SpringCloud全家桶
  • Dubbo
  • SpringCloud Alibaba
  • Vue
  • 小程序
  • 博客搭建
  • 数据库
  • python
  • 大数据
  • 性能分析优化
  • 中间件
  • 云原生
  • 面试
  • 外卖霸王餐
  • 打工人的带饭生活
  • 30岁我该怎么办
友链
关于我
GitHub (opens new window)
  • Java基础

    • 认识Java语言
    • Java环境搭建
    • 第一个Java程序
    • Java基础语法
    • Java数据类型
    • Java修饰符
    • Java面向对象
    • Java输入输出流
    • Java字符串
    • Java集合
    • Java多线程编程
    • Java网络编程
      • 1. Java网络编程
        • Java网络编程框架
      • 2. Java Socket编程
        • socket编程示例
      • 3. Java NIO(New Input/Output)
        • NIO编程示例
      • 4. 总结
    • 线程之间如何进行通讯
  • Java进阶

  • 设计模式

  • 多线程

  • 你不知道的小事

  • Java基础
  • Java基础
Mr.Fire
2024-05-02
目录

Java网络编程

# 1. Java网络编程

Java网络编程是指利用Java开发网络应用,包括客户端和服务器端。Java网络编程涉及到以下几个方面:

  1. 网络通信:Java网络编程涉及到网络通信,包括TCP/IP协议、UDP协议、Socket编程等。
  2. 网络应用开发:Java网络编程可以开发各种网络应用,如Web应用、分布式应用、游戏应用等。
  3. 网络协议:Java网络编程涉及到各种网络协议,如HTTP、FTP、SMTP等。
  4. 网络安全:Java网络编程涉及到网络安全,包括SSL/TLS协议、IPSec协议等。
  5. 网络性能:Java网络编程可以提高网络性能,如优化网络连接、减少网络延迟等。

# Java网络编程框架

Java网络编程的主要框架有:

  1. Java Socket编程:Java Socket编程是Java网络编程的基础,它提供了TCP/IP协议的封装,可以方便地进行网络通信。
  2. Java NIO(New Input/Output):Java NIO是Java网络编程的高级特性,它提供了高性能的网络通信。

# 2. Java Socket编程

Java Socket编程是Java网络编程的基础,它提供了TCP/IP协议的封装,可以方便地进行网络通信。Java Socket编程主要包括以下内容:

  1. Socket类:Socket类是Java网络编程的基础,它提供了TCP/IP协议的封装,可以方便地进行网络通信。Socket类的主要方法包括connect()、bind()、close()等。

  2. ServerSocket类:ServerSocket类用于监听客户端的连接请求,并为每个客户端创建一个Socket对象。ServerSocket类的主要方法包括accept()、close()等。

  3. DatagramSocket类:DatagramSocket类用于发送和接收UDP协议的数据报。DatagramSocket类的主要方法包括send()、receive()等。

  4. InetAddress类:InetAddress类用于表示IP地址。InetAddress类的主要方法包括getHostAddress()、getHostName()等。

  5. URL类:URL类用于表示网络资源的位置。URL类的主要方法包括openConnection()、openStream()等。

# socket编程示例

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServer {
    public static void main(String[] args) throws IOException {
        // 1.创建ServerSocket对象,监听端口
        ServerSocket serverSocket = new ServerSocket(8888);
        System.out.println("服务器启动,监听端口:8888");

        // 2.等待客户端连接
        Socket socket = serverSocket.accept();
        System.out.println("客户端连接成功:" + socket.getInetAddress().getHostAddress());

        // 3.获取输入流和输出流
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);

        // 4.接收客户端消息
        String message = null;
        while ((message = br.readLine())!= null) {
            System.out.println("客户端:" + message);

            // 5.发送消息给客户端
            pw.println("服务器:" + message);
        }

        // 6.关闭资源
        br.close();
        pw.close();
        socket.close();
        serverSocket.close();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

# 3. Java NIO(New Input/Output)

Java NIO(New Input/Output)是Java网络编程的高级特性,它提供了高性能的网络通信。Java NIO主要包括以下内容:

  1. Channel类:Channel类是Java NIO的核心,它提供了非阻塞的I/O操作。Channel类的主要方法包括read()、write()等。
  2. Selector类:Selector类是Java NIO的核心,它提供了多路复用(multiplexing)功能,可以同时监控多个Channel。Selector类的主要方法包括select()、wakeup()等。
  3. Buffer类:Buffer类是Java NIO的核心,它提供了缓冲区,可以用于高效地读写数据。Buffer类的主要方法包括clear()、flip()、position()等。
  4. Charset类:Charset类用于指定字符集,它提供了编码和解码功能。Charset类的主要方法包括forName()、encode()、decode()等。
  5. CharsetDecoder类:CharsetDecoder类用于解码字符集,它提供了decode()方法。
  6. CharsetEncoder类:CharsetEncoder类用于编码字符集,它提供了encode()方法。
  7. ByteBuffer类:ByteBuffer类是Java NIO的缓冲区类,它提供了字节缓冲区,可以用于读写字节数据。ByteBuffer类的主要方法包括allocate()、put()、get()等。
  8. MappedByteBuffer类:MappedByteBuffer类是Java NIO的缓冲区类,它提供了内存映射文件,可以直接操作文件。MappedByteBuffer类的主要方法包括load()、force()等。
  9. FileChannel类:FileChannel类用于读写文件,它提供了文件指针操作、数据传输等功能。FileChannel类的主要方法包括read()、write()等。
  10. SocketChannel类:SocketChannel类用于读写Socket,它提供了SocketChannel的创建、连接、读写等功能。SocketChannel类的主要方法包括connect()、read()、write()等。
  11. ServerSocketChannel类:ServerSocketChannel类用于监听Socket连接请求,并为每个连接创建一个SocketChannel对象。ServerSocketChannel类的主要方法包括accept()、close()等。
  12. DatagramChannel类:DatagramChannel类用于读写UDP协议的数据报,它提供了DatagramChannel的创建、连接、读写等功能。DatagramChannel类的主要方法包括connect()、read()、write()等。

# NIO编程示例

下面是一个简单的Java NIO编程示例,演示了如何使用Java NIO进行网络通信:

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.DatagramChannel;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import java.util.Set;

public class NIOExample {
    public static void main(String[] args) throws IOException {
        // 1.创建Selector对象
        Selector selector = Selector.open();    

        // 2.创建ServerSocketChannel对象,监听端口
        ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
        serverSocketChannel.configureBlocking(false);
        serverSocketChannel.bind(new InetSocketAddress(8888));
        serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);

        while (true) {
            // 3.选择Channel
            selector.select();

            // 4.获取已选择的Channel
            Set<SelectionKey> selectedKeys = selector.selectedKeys();
            Iterator<SelectionKey> keyIterator = selectedKeys.iterator();
            while (keyIterator.hasNext()) {
                SelectionKey key = keyIterator.next();
                keyIterator.remove();

                if (key.isAcceptable()) {
                    // 5.处理新连接
                    ServerSocketChannel serverChannel = (ServerSocketChannel) key.channel();
                    SocketChannel socketChannel = serverChannel.accept();
                    socketChannel.configureBlocking(false);
                    socketChannel.register(selector, SelectionKey.OP_READ);
                } else if (key.isReadable()) {
                    // 6.处理读事件
                    SocketChannel socketChannel = (SocketChannel) key.channel();
                    ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
                    int readBytes = socketChannel.read(byteBuffer);
                    if (readBytes > 0) {
                        byteBuffer.flip();
                        byte[] bytes = new byte[byteBuffer.remaining()];
                        byteBuffer.get(bytes);
                        String message = new String(bytes, "UTF-8");
                        System.out.println("客户端:" + message);

                        // 回复客户端消息
                        byte[] response = "服务器回复:".getBytes();
                        ByteBuffer responseBuffer = ByteBuffer.allocate(response.length);
                        responseBuffer.put(response);
                        responseBuffer.put(bytes);
                        responseBuffer.flip();   
                        socketChannel.write(responseBuffer);
                    } else if (readBytes < 0) {
                        // 7.处理客户端断开连接
                        key.cancel();
                        socketChannel.close();
                    }
                }
            }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68

# 4. 总结

Java网络编程是指利用Java开发网络应用,包括客户端和服务器端。Java网络编程涉及到以下几个方面:

  1. 网络通信:Java网络编程涉及到网络通信,包括TCP/IP协议、UDP协议、Socket编程等。
  2. 网络应用开发:Java网络编程可以开发各种网络应用,如Web应用、分布式应用、游戏应用等。
  3. 网络协议:Java网络编程涉及到各种网络协议,如HTTP、FTP、SMTP等。
  4. 网络安全:Java网络编程涉及到网络安全,包括SSL/TLS协议、IPSec协议等。
  5. 网络性能:Java网络编程可以提高网络性能,如优化网络连接、减少网络延迟等。
最后更新时间: 2024/12/26, 17:56:54
Java多线程编程
线程之间如何进行通讯

← Java多线程编程 线程之间如何进行通讯→

最近更新
01
SuperBuilder
12-29
02
30岁我该怎么办
12-29
03
关于存钱
12-29
更多文章>
Theme by Vdoing | Copyright © 2021-2025 Mr.Fire | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式