Java网络编程与网络通信基础

13.1 学习目标与重点提示
学习目标:掌握Java网络编程的核心概念与通信方式,包括套接字编程、TCP/IP通信、UDP通信、HTTP通信的实现方法,学会在实际开发中处理网络通信问题。
重点:套接字编程(Socket、ServerSocket)、TCP/IP通信(服务器端、客户端)、UDP通信(DatagramSocket、DatagramPacket)、HTTP通信(URL、URLConnection)、网络编程的实际应用场景。
13.2 网络编程概述
Java网络编程是用于处理网络通信的机制。
13.2.1 网络编程的定义
定义:网络编程是用于处理网络通信的机制。
作用:
- 实现客户端与服务器之间的通信。
- 实现不同设备之间的数据传输。
- 实现网络应用程序的开发。
✅ 结论:网络编程是用于处理网络通信的机制,作用是实现客户端与服务器之间的通信、不同设备之间的数据传输、网络应用程序的开发。
13.2.2 网络编程的分类
定义:网络编程的分类是指Java中网络编程的分类方法。
分类:
- TCP/IP通信:可靠的、面向连接的通信方式。
- UDP通信:不可靠的、无连接的通信方式。
- HTTP通信:基于TCP/IP的应用层通信方式。
✅ 结论:网络编程的分类包括TCP/IP通信、UDP通信、HTTP通信。
13.3 套接字编程基础
套接字编程是Java网络编程的基础。
13.3.1 Socket与ServerSocket的定义
定义:Socket是用于表示网络连接的对象。
ServerSocket:用于表示服务器端的套接字。
常用方法:
- Socket:
- getInputStream():获取输入流。
- getOutputStream():获取输出流。
- close():关闭套接字。
- ServerSocket:
- accept():接受客户端连接。
- close():关闭服务器端套接字。
示例:
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();
}
}
}
输出结果:
服务器端:
服务器端启动成功,等待客户端连接…
客户端连接成功:127.0.0.1
客户端消息:Hello, Server!
客户端:
客户端连接成功
服务器端响应:服务器端已收到消息:Hello, Server!
✅ 结论:Socket与ServerSocket是Java网络编程的基础,用于实现客户端与服务器之间的通信。
13.4 TCP/IP通信的实现
TCP/IP通信是可靠的、面向连接的通信方式。
13.4.1 服务器端的实现
定义:服务器端的实现是指Java中服务器端的网络编程方法。
示例:
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();
}
}
}
✅ 结论:服务器端的实现是指Java中服务器端的网络编程方法,需要创建线程处理客户端请求。
13.4.2 客户端的实现
定义:客户端的实现是指Java中客户端的网络编程方法。
示例:
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();
}
}
}
✅ 结论:客户端的实现是指Java中客户端的网络编程方法,需要与服务器端建立连接并发送数据。
13.5 UDP通信的实现
UDP通信是不可靠的、无连接的通信方式。
13.5.1 DatagramSocket与DatagramPacket的定义
定义:DatagramSocket是用于表示UDP套接字的对象。
DatagramPacket:用于表示UDP数据包的对象。
常用方法:
- DatagramSocket:
- send():发送数据包。
- receive():接收数据包。
- close():关闭套接字。
- DatagramPacket:
- getData():获取数据包中的数据。
- getLength():获取数据包的长度。
- getAddress():获取数据包的发送方地址。
- getPort():获取数据包的发送方端口。
示例:
import java.io.*;
import java.net.*;
// 服务器端
public class UDPServer {
public static void main(String[] args) {
try {
// 创建UDP套接字
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 {
// 创建UDP套接字
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();
}
}
}
输出结果:
服务器端:
服务器端启动成功,等待客户端连接…
客户端消息:Hello, Server!
客户端:
客户端启动成功
服务器端响应:服务器端已收到消息:Hello, Server!
✅ 结论:DatagramSocket与DatagramPacket是Java中UDP通信的基础,用于实现客户端与服务器之间的通信。
13.6 HTTP通信的实现
HTTP通信是基于TCP/IP的应用层通信方式。
13.6.1 URL与URLConnection的定义
定义:URL是用于表示统一资源定位符的对象。
URLConnection:用于表示URL连接的对象。
常用方法:
- URL:
- openConnection():打开URL连接。
- getProtocol():获取协议。
- getHost():获取主机名。
- getPort():获取端口。
- getPath():获取路径。
- URLConnection:
- getInputStream():获取输入流。
- getOutputStream():获取输出流。
- setRequestProperty():设置请求属性。
- getResponseCode():获取响应码。
- getResponseMessage():获取响应消息。
示例:
import java.io.*;
import java.net.*;
// 测试类
public class HTTPExample {
public static void main(String[] args) {
try {
// 创建URL对象
URL url = new URL("https://www.baidu.com");
// 打开URL连接
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();
}
}
}
输出结果:
响应数据:<html>…</html>
✅ 结论:URL与URLConnection是Java中HTTP通信的基础,用于实现与Web服务器之间的通信。
13.7 网络编程的实际应用场景
在实际开发中,网络编程的应用场景非常广泛,如:
- 客户端与服务器之间的通信。
- 网络文件传输。
- 网络聊天。
- 网络爬虫。
示例:
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();
}
}
}
输出结果:
服务器端:
服务器端启动成功,等待客户端连接…
客户端连接成功:127.0.0.1
文件名:test.txt
文件上传成功
客户端:
客户端连接成功
文件上传成功
✅ 结论:在实际开发中,网络编程的应用场景非常广泛,需要根据实际问题选择合适的网络编程方法。
总结
本章我们学习了Java网络编程与网络通信基础,包括套接字编程、TCP/IP通信、UDP通信、HTTP通信的实现方法,学会了在实际开发中处理网络通信问题。其中,套接字编程(Socket、ServerSocket)、TCP/IP通信(服务器端、客户端)、UDP通信(DatagramSocket、DatagramPacket)、HTTP通信(URL、URLConnection)、网络编程的实际应用场景是本章的重点内容。从下一章开始,我们将学习Java的数据库操作、Web开发等内容。
网硕互联帮助中心


![[python]共享舞蹈课程预约系统 健身房的小程序设计视频(编号:91761267)-网硕互联帮助中心](https://www.wsisp.com/helps/wp-content/uploads/2026/02/20260224145806-699dbc7eddca3-220x150.jpg)


评论前必须登录!
注册