Java的网络编程是指利用Java语言提供的API进行网络通信的过程。通过网络编程,Java应用程序可以与其他运行在网络中的程序或服务进行数据交换。Java提供了丰富的类库支持不同层次的网络编程,使得开发者能够轻松地编写客户端和服务器端的应用程序。
核心概念
- IP地址与端口:每个设备在网络上都有一个唯一的标识符称为IP地址。端口号则用于区分同一设备上不同的网络应用。通常,服务端会监听特定的端口等待客户端连接请求。
- Socket:套接字(Socket)是网络通信的基础,它提供了一个通道,允许两个节点之间通过网络发送和接收数据。在Java中,
Socket
类代表客户端套接字,而ServerSocket
类代表服务器端套接字。 - 协议:网络通信依赖于各种协议来规范数据如何被格式化、传输以及处理。最常用的协议包括TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)。TCP提供可靠的、面向连接的服务;UDP则是无连接的,提供更高效的但不可靠的数据传输服务。
基本步骤
- 创建服务器端应用:
- 创建一个
ServerSocket
实例,并指定监听的端口号。 - 调用
accept()
方法等待客户端连接。 - 连接建立后,可以通过返回的
Socket
对象获取输入输出流来进行数据交换。 - 关闭相应的资源。
- 创建一个
- 创建客户端应用:
- 使用
Socket
构造函数指定服务器地址和端口号来创建客户端套接字。 - 获取输入输出流以发送和接收数据。
- 完成通信后关闭套接字。
- 使用
示例代码
服务器端示例
import java.io.*;
import java.net.*;
public class SimpleServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8080);
System.out.println("Waiting for client...");
Socket socket = serverSocket.accept();
System.out.println("Connected to client.");
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println("Received: " + inputLine);
out.println("Echo: " + inputLine);
}
in.close();
out.close();
socket.close();
serverSocket.close();
}
}
客户端示例
import java.io.*;
import java.net.*;
public class SimpleClient {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost", 8080);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("Server response: " + in.readLine());
}
in.close();
out.close();
socket.close();
}
}
以上例子展示了如何使用TCP协议实现简单的客户端-服务器端通信。Java还提供了其他高级特性,如NIO(非阻塞I/O)和AIO(异步I/O),用于构建高性能的网络应用。理解这些基础可以帮助你更好地设计和实现复杂的分布式系统。
THE END