Java网络编程
# 1. Java网络编程
Java网络编程是指利用Java开发网络应用,包括客户端和服务器端。Java网络编程涉及到以下几个方面:
- 网络通信:Java网络编程涉及到网络通信,包括TCP/IP协议、UDP协议、Socket编程等。
- 网络应用开发:Java网络编程可以开发各种网络应用,如Web应用、分布式应用、游戏应用等。
- 网络协议:Java网络编程涉及到各种网络协议,如HTTP、FTP、SMTP等。
- 网络安全:Java网络编程涉及到网络安全,包括SSL/TLS协议、IPSec协议等。
- 网络性能:Java网络编程可以提高网络性能,如优化网络连接、减少网络延迟等。
# Java网络编程框架
Java网络编程的主要框架有:
- Java Socket编程:Java Socket编程是Java网络编程的基础,它提供了TCP/IP协议的封装,可以方便地进行网络通信。
- Java NIO(New Input/Output):Java NIO是Java网络编程的高级特性,它提供了高性能的网络通信。
# 2. Java Socket编程
Java Socket编程是Java网络编程的基础,它提供了TCP/IP协议的封装,可以方便地进行网络通信。Java Socket编程主要包括以下内容:
Socket类:Socket类是Java网络编程的基础,它提供了TCP/IP协议的封装,可以方便地进行网络通信。Socket类的主要方法包括connect()、bind()、close()等。
ServerSocket类:ServerSocket类用于监听客户端的连接请求,并为每个客户端创建一个Socket对象。ServerSocket类的主要方法包括accept()、close()等。
DatagramSocket类:DatagramSocket类用于发送和接收UDP协议的数据报。DatagramSocket类的主要方法包括send()、receive()等。
InetAddress类:InetAddress类用于表示IP地址。InetAddress类的主要方法包括getHostAddress()、getHostName()等。
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
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主要包括以下内容:
- Channel类:Channel类是Java NIO的核心,它提供了非阻塞的I/O操作。Channel类的主要方法包括read()、write()等。
- Selector类:Selector类是Java NIO的核心,它提供了多路复用(multiplexing)功能,可以同时监控多个Channel。Selector类的主要方法包括select()、wakeup()等。
- Buffer类:Buffer类是Java NIO的核心,它提供了缓冲区,可以用于高效地读写数据。Buffer类的主要方法包括clear()、flip()、position()等。
- Charset类:Charset类用于指定字符集,它提供了编码和解码功能。Charset类的主要方法包括forName()、encode()、decode()等。
- CharsetDecoder类:CharsetDecoder类用于解码字符集,它提供了decode()方法。
- CharsetEncoder类:CharsetEncoder类用于编码字符集,它提供了encode()方法。
- ByteBuffer类:ByteBuffer类是Java NIO的缓冲区类,它提供了字节缓冲区,可以用于读写字节数据。ByteBuffer类的主要方法包括allocate()、put()、get()等。
- MappedByteBuffer类:MappedByteBuffer类是Java NIO的缓冲区类,它提供了内存映射文件,可以直接操作文件。MappedByteBuffer类的主要方法包括load()、force()等。
- FileChannel类:FileChannel类用于读写文件,它提供了文件指针操作、数据传输等功能。FileChannel类的主要方法包括read()、write()等。
- SocketChannel类:SocketChannel类用于读写Socket,它提供了SocketChannel的创建、连接、读写等功能。SocketChannel类的主要方法包括connect()、read()、write()等。
- ServerSocketChannel类:ServerSocketChannel类用于监听Socket连接请求,并为每个连接创建一个SocketChannel对象。ServerSocketChannel类的主要方法包括accept()、close()等。
- 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
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网络编程涉及到以下几个方面:
- 网络通信:Java网络编程涉及到网络通信,包括TCP/IP协议、UDP协议、Socket编程等。
- 网络应用开发:Java网络编程可以开发各种网络应用,如Web应用、分布式应用、游戏应用等。
- 网络协议:Java网络编程涉及到各种网络协议,如HTTP、FTP、SMTP等。
- 网络安全:Java网络编程涉及到网络安全,包括SSL/TLS协议、IPSec协议等。
- 网络性能:Java网络编程可以提高网络性能,如优化网络连接、减少网络延迟等。
最后更新时间: 2024/12/26, 17:56:54