Java 网络编程与网络通信基础
Java 网络编程涵盖套接字编程、TCP/IP、UDP 及 HTTP 通信。核心类包括 Socket、ServerSocket、DatagramSocket 等。TCP 提供可靠连接,通过 ServerSocket 监听端口并处理多线程请求;UDP 无连接,基于 DatagramPacket 传输数据;HTTP 基于 URL 和 URLConnection 实现 Web 交互。实际场景涉及文件传输、聊天应用等开发。掌握这些基础有助于解决网络通信问题。

Java 网络编程涵盖套接字编程、TCP/IP、UDP 及 HTTP 通信。核心类包括 Socket、ServerSocket、DatagramSocket 等。TCP 提供可靠连接,通过 ServerSocket 监听端口并处理多线程请求;UDP 无连接,基于 DatagramPacket 传输数据;HTTP 基于 URL 和 URLConnection 实现 Web 交互。实际场景涉及文件传输、聊天应用等开发。掌握这些基础有助于解决网络通信问题。

学习目标:掌握 Java 网络编程的核心概念与通信方式,包括套接字编程、TCP/IP 通信、UDP 通信、HTTP 通信的实现方法,学会在实际开发中处理网络通信问题。
重点:
Java 网络编程是用于处理网络通信的机制。
定义:网络编程是用于处理网络通信的机制。
作用:
结论:网络编程是实现客户端与服务器通信、设备间数据传输及网络应用开发的基础机制。
分类:
结论:网络编程主要包含 TCP/IP、UDP 和 HTTP 通信三种类型。
套接字编程是 Java 网络编程的基础。
定义:Socket 是用于表示网络连接的对象。ServerSocket 用于表示服务器端的套接字。
常用方法:
示例:
import java.io.*;
import java.net.*;
// 服务器端
public class TCPServer {
public static void main(String[] args) {
try {
// 创建服务器端套接字
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务器端启动成功,等待客户端连接...");
// 接受客户端连接
Socket socket = serverSocket.accept();
System.out.println("客户端连接成功:" + socket.getInetAddress().getHostAddress());
// 获取输入流和输出流
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
// 读取客户端数据
String message = reader.readLine();
System.out.println("客户端消息:" + message);
// 发送响应数据
writer.println("服务器端已收到消息:" + message);
// 关闭资源
reader.close();
writer.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 客户端
public class TCPClient {
public static void main(String[] args) {
try {
// 创建客户端套接字
Socket socket = new Socket("localhost", 8888);
System.out.println("客户端连接成功");
// 获取输入流和输出流
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
// 发送数据
writer.println("Hello, Server!");
// 读取响应数据
String response = reader.readLine();
System.out.println("服务器端响应:" + response);
// 关闭资源
reader.close();
writer.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出结果: 服务器端显示连接成功及消息接收,客户端显示响应内容。
结论:Socket 与 ServerSocket 是 Java 网络编程的基础,用于实现客户端与服务器之间的通信。
TCP/IP 通信是可靠的、面向连接的通信方式。
示例:
import java.io.*;
import java.net.*;
public class TCPServer {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务器端启动成功,等待客户端连接...");
while (true) {
Socket socket = serverSocket.accept();
System.out.println("客户端连接成功:" + socket.getInetAddress().getHostAddress());
new Thread(() -> {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
String message = reader.readLine();
System.out.println("客户端消息:" + message);
writer.println("服务器端已收到消息:" + message);
reader.close();
writer.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
结论:服务器端需创建线程处理客户端请求。
示例:
import java.io.*;
import java.net.*;
public class TCPClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 8888);
System.out.println("客户端连接成功");
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
writer.println("Hello, Server!");
String response = reader.readLine();
System.out.println("服务器端响应:" + response);
reader.close();
writer.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
结论:客户端需与服务器端建立连接并发送数据。
UDP 通信是不可靠的、无连接的通信方式。
定义:DatagramSocket 表示 UDP 套接字,DatagramPacket 表示 UDP 数据包。
常用方法:
示例:
import java.io.*;
import java.net.*;
// 服务器端
public class UDPServer {
public static void main(String[] args) {
try {
DatagramSocket socket = new DatagramSocket(8888);
System.out.println("服务器端启动成功,等待客户端连接...");
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
String message = new String(packet.getData(), 0, packet.getLength());
System.out.println("客户端消息:" + message);
String response = "服务器端已收到消息:" + message;
byte[] responseBuffer = response.getBytes();
DatagramPacket responsePacket = new DatagramPacket(responseBuffer, responseBuffer.length, packet.getAddress(), packet.getPort());
socket.send(responsePacket);
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 客户端
public class UDPClient {
public static void main(String[] args) {
try {
DatagramSocket socket = new DatagramSocket();
System.out.println("客户端启动成功");
String message = "Hello, Server!";
byte[] buffer = message.getBytes();
InetAddress address = InetAddress.getByName("localhost");
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, 8888);
socket.send(packet);
byte[] responseBuffer = new byte[1024];
DatagramPacket responsePacket = new DatagramPacket(responseBuffer, responseBuffer.length);
socket.receive(responsePacket);
String response = new String(responsePacket.getData(), 0, responsePacket.getLength());
System.out.println("服务器端响应:" + response);
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
结论:DatagramSocket 与 DatagramPacket 是 Java 中 UDP 通信的基础。
HTTP 通信是基于 TCP/IP 的应用层通信方式。
定义:URL 表示统一资源定位符,URLConnection 表示 URL 连接。
常用方法:
示例:
import java.io.*;
import java.net.*;
public class HTTPExample {
public static void main(String[] args) {
try {
URL url = new URL("https://www.baidu.com");
URLConnection connection = url.openConnection();
connection.setRequestProperty("User-Agent", "Mozilla/5.0");
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
StringBuffer response = new StringBuffer();
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
System.out.println("响应数据:" + response.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
结论:URL 与 URLConnection 是 Java 中 HTTP 通信的基础。
实际开发中,网络编程广泛应用于文件传输、聊天、爬虫等场景。
示例:文件上传
import java.io.*;
import java.net.*;
// 文件上传服务器端
public class FileUploadServer {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务器端启动成功,等待客户端连接...");
Socket socket = serverSocket.accept();
System.out.println("客户端连接成功:" + socket.getInetAddress().getHostAddress());
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
FileOutputStream fileOutputStream = new FileOutputStream("uploaded_file.txt");
String fileName = reader.readLine();
System.out.println("文件名:" + fileName);
byte[] buffer = new byte[1024];
int length;
while ((length = dataInputStream.read(buffer)) > 0) {
fileOutputStream.write(buffer, 0, length);
}
fileOutputStream.close();
dataInputStream.close();
reader.close();
socket.close();
serverSocket.close();
System.out.println("文件上传成功");
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 文件上传客户端
public class FileUploadClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 8888);
System.out.println("客户端连接成功");
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
FileInputStream fileInputStream = new FileInputStream("test.txt");
String fileName = "test.txt";
writer.println(fileName);
byte[] buffer = new byte[1024];
int length;
while ((length = fileInputStream.read(buffer)) > 0) {
dataOutputStream.write(buffer, 0, length);
}
fileInputStream.close();
dataOutputStream.close();
writer.close();
socket.close();
System.out.println("文件上传成功");
} catch (IOException e) {
e.printStackTrace();
}
}
}
结论:根据实际问题选择合适的网络编程方法。
本章学习了 Java 网络编程与网络通信基础,包括套接字编程、TCP/IP 通信、UDP 通信、HTTP 通信的实现方法。重点掌握了 Socket、ServerSocket、DatagramSocket、DatagramPacket、URL、URLConnection 等核心类的使用,以及在网络文件传输等实际场景中的应用。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
暂无推荐文章,稍后可再来查看。
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online