返回
Java Socket 编程(附案例详解)
后端
2024-01-05 10:09:50
Java Socket 网络编程简介
Java Socket 是 Java 提供的一种网络编程 API,它允许 Java 程序通过网络与其他计算机进行通信。Socket 编程可以实现多种网络通信方式,包括 TCP、UDP、HTTP 等。
Socket 基础概念
在 Socket 编程中,有两个重要的概念:客户端和服务端。
- 客户端 :发起网络连接的一方,通常是用户计算机或应用程序。
- 服务端 :接受网络连接的一方,通常是服务器计算机或应用程序。
Java Socket 编程步骤
Java Socket 编程通常包括以下步骤:
- 创建 Socket 对象。
- 连接到服务端。
- 发送和接收数据。
- 关闭连接。
Java Socket 编程案例
案例一:TCP 客户端和服务端
本案例演示如何使用 Java Socket 编程实现一个简单的 TCP 客户端和服务端。
客户端代码:
import java.net.*;
import java.io.*;
public class TCPClient {
public static void main(String[] args) {
try {
// 创建 Socket 对象
Socket socket = new Socket("localhost", 8888);
// 获取输出流
OutputStream os = socket.getOutputStream();
// 发送数据
os.write("Hello, server!".getBytes());
// 获取输入流
InputStream is = socket.getInputStream();
// 接收数据
byte[] buffer = new byte[1024];
int length = is.read(buffer);
// 打印接收到的数据
System.out.println(new String(buffer, 0, length));
// 关闭连接
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务端代码:
import java.net.*;
import java.io.*;
public class TCPServer {
public static void main(String[] args) {
try {
// 创建 ServerSocket 对象
ServerSocket serverSocket = new ServerSocket(8888);
// 等待客户端连接
Socket socket = serverSocket.accept();
// 获取输入流
InputStream is = socket.getInputStream();
// 读取数据
byte[] buffer = new byte[1024];
int length = is.read(buffer);
// 打印接收到的数据
System.out.println(new String(buffer, 0, length));
// 获取输出流
OutputStream os = socket.getOutputStream();
// 发送数据
os.write("Hello, client!".getBytes());
// 关闭连接
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
案例二:UDP 客户端和服务端
本案例演示如何使用 Java Socket 编程实现一个简单的 UDP 客户端和服务端。
客户端代码:
import java.net.*;
import java.io.*;
public class UDPClient {
public static void main(String[] args) {
try {
// 创建 DatagramSocket 对象
DatagramSocket socket = new DatagramSocket();
// 发送数据
byte[] data = "Hello, server!".getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getByName("localhost"), 8888);
socket.send(packet);
// 接收数据
byte[] buffer = new byte[1024];
packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
// 打印接收到的数据
System.out.println(new String(buffer, 0, packet.getLength()));
// 关闭连接
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务端代码:
import java.net.*;
import java.io.*;
public class UDPServer {
public static void main(String[] args) {
try {
// 创建 DatagramSocket 对象
DatagramSocket socket = new DatagramSocket(8888);
// 接收数据
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
// 打印接收到的数据
System.out.println(new String(buffer, 0, packet.getLength()));
// 发送数据
byte[] data = "Hello, client!".getBytes();
packet = new DatagramPacket(data, data.length, packet.getAddress(), packet.getPort());
socket.send(packet);
// 关闭连接
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
总结
Java Socket 编程是 Java 网络编程的基础,通过学习 Java Socket 编程,您可以快速掌握 Java 网络编程的基础知识,并实现各种网络应用。