今日深入学习了Java中的网络编程,这是Java编程中用于实现网络通信的重要部分。通过网络编程,Java程序可以与其他计算机上的程序进行数据交换和通信,实现客户端-服务器(C/S)架构和分布式系统。
Java网络编程主要涉及两个方面:套接字(Socket)编程和URL处理。
套接字是网络通信的基础,它提供了一种在不同主机上的进程之间进行双向通信的机制。Java提供了Socket类和ServerSocket类来支持套接字编程。
客户端(Client):使用Socket类创建客户端套接字,连接到服务器。例如:
java
import java.io.*;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
try (Socket socket = new Socket("localhost", 12345);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
out.println("Hello, Server!");
String response = in.readLine();
System.out.println("Server response: " + response);
} catch (IOException e) {
e.printStackTrace();
}
}
}
在这个例子中,客户端连接到本地主机的12345端口,发送一条消息并接收服务器的响应。
服务器端(Server):使用ServerSocket类创建服务器套接字,监听客户端连接。例如:
java
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(12345)) {
System.out.println("Server is listening on port 12345");
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("New client connected");
try (PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))) {
String request = in.readLine();
System.out.println("Client request: " + request);
out.println("Hello, Client!");
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
在这个例子中,服务器监听12345端口,接受客户端连接,读取客户端请求并发送响应。
URL处理
Java提供了URL类来处理统一资源定位符(URL),可以用于访问网络资源,如网页、文件等。例如,获取一个网页的内容:
java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
public class URLExample {
public static void main(String[] args) {
try {
URL url = new URL("https://www.example.com");
URLConnection connection = url.openConnection();
try (BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
在这个例子中,使用URL类访问https://www.example.com,并读取网页内容。