云计算百科
云计算领域专业知识百科平台

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

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开发等内容。

赞(0)
未经允许不得转载:网硕互联帮助中心 » Java网络编程与网络通信基础
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!