本文目录导读:

我将为您提供一个完整的Java网络编程案例,涵盖TCP和UDP通信。
TCP通信案例(Socket编程)
服务器端代码
import java.io.*;
import java.net.*;
import java.util.concurrent.*;
public class TCPServer {
private static final int PORT = 8888;
private static volatile boolean running = true;
private static final ExecutorService threadPool = Executors.newFixedThreadPool(10);
public static void main(String[] args) {
System.out.println("TCP服务器启动,监听端口:" + PORT);
try (ServerSocket serverSocket = new ServerSocket(PORT)) {
while (running) {
try {
Socket clientSocket = serverSocket.accept();
System.out.println("客户端连接:" + clientSocket.getInetAddress());
// 为每个客户端创建独立线程处理
threadPool.submit(() -> handleClient(clientSocket));
} catch (IOException e) {
if (running) {
e.printStackTrace();
}
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
threadPool.shutdown();
}
}
private static void handleClient(Socket socket) {
try (socket;
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true)) {
String message;
while ((message = in.readLine()) != null) {
System.out.println("收到客户端消息:" + message);
// 服务器响应
String response = "服务器收到消息:" + message;
out.println(response);
// 处理退出命令
if ("quit".equalsIgnoreCase(message)) {
break;
}
}
System.out.println("客户端断开连接");
} catch (IOException e) {
e.printStackTrace();
}
}
// 停止服务器的方法
public static void stopServer() {
running = false;
}
}
客户端代码
import java.io.*;
import java.net.*;
public class TCPClient {
private static final String SERVER_HOST = "localhost";
private static final int SERVER_PORT = 8888;
public static void main(String[] args) {
try (Socket socket = new Socket(SERVER_HOST, SERVER_PORT);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in))) {
System.out.println("已连接到服务器,输入消息发送(输入quit退出)");
String userInput;
while ((userInput = consoleReader.readLine()) != null) {
// 发送消息到服务器
out.println(userInput);
// 接收服务器响应
String response = in.readLine();
System.out.println("服务器响应:" + response);
if ("quit".equalsIgnoreCase(userInput)) {
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
UDP通信案例
UDP服务器
import java.net.*;
public class UDPServer {
private static final int PORT = 9999;
private static final int BUFFER_SIZE = 1024;
public static void main(String[] args) {
byte[] buffer = new byte[BUFFER_SIZE];
try (DatagramSocket socket = new DatagramSocket(PORT)) {
System.out.println("UDP服务器启动,监听端口:" + PORT);
while (true) {
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
// 解析收到的数据
String message = new String(packet.getData(), 0, packet.getLength());
InetAddress clientAddress = packet.getAddress();
int clientPort = packet.getPort();
System.out.println("收到来自 " + clientAddress + ":" + clientPort + " 的消息:" + message);
// 发送响应
String response = "UDP服务器已收到消息:" + message;
byte[] responseData = response.getBytes();
DatagramPacket responsePacket = new DatagramPacket(
responseData, responseData.length, clientAddress, clientPort
);
socket.send(responsePacket);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
UDP客户端
import java.net.*;
import java.io.*;
public class UDPClient {
private static final String SERVER_HOST = "localhost";
private static final int SERVER_PORT = 9999;
public static void main(String[] args) {
try (DatagramSocket socket = new DatagramSocket();
BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in))) {
InetAddress serverAddress = InetAddress.getByName(SERVER_HOST);
System.out.println("UDP客户端启动,输入消息发送(输入quit退出)");
String input;
while ((input = consoleReader.readLine()) != null) {
if ("quit".equalsIgnoreCase(input)) {
break;
}
// 发送数据
byte[] sendData = input.getBytes();
DatagramPacket sendPacket = new DatagramPacket(
sendData, sendData.length, serverAddress, SERVER_PORT
);
socket.send(sendPacket);
// 接收响应
byte[] buffer = new byte[1024];
DatagramPacket receivePacket = new DatagramPacket(buffer, buffer.length);
socket.receive(receivePacket);
String response = new String(receivePacket.getData(), 0, receivePacket.getLength());
System.out.println("服务器响应:" + response);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
文件传输案例
文件服务器
import java.io.*;
import java.net.*;
public class FileServer {
private static final int PORT = 7777;
private static final String FILE_DIRECTORY = "server_files/";
public static void main(String[] args) {
// 创建文件存储目录
new File(FILE_DIRECTORY).mkdirs();
System.out.println("文件服务器启动,监听端口:" + PORT);
try (ServerSocket serverSocket = new ServerSocket(PORT)) {
while (true) {
Socket socket = serverSocket.accept();
System.out.println("客户端连接:" + socket.getInetAddress());
// 处理文件上传
handleFileUpload(socket);
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static void handleFileUpload(Socket socket) {
try (socket;
DataInputStream dis = new DataInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(socket.getOutputStream())) {
// 读取文件名
String fileName = dis.readUTF();
// 读取文件大小
long fileSize = dis.readLong();
System.out.println("接收文件:" + fileName + "(大小:" + fileSize + "字节)");
// 保存文件
String savePath = FILE_DIRECTORY + fileName;
try (FileOutputStream fos = new FileOutputStream(savePath)) {
byte[] buffer = new byte[4096];
int read;
long remaining = fileSize;
while (remaining > 0 && (read = dis.read(buffer, 0, (int)Math.min(buffer.length, remaining))) != -1) {
fos.write(buffer, 0, read);
remaining -= read;
}
}
// 发送成功响应
dos.writeUTF("文件接收成功:" + fileName);
} catch (IOException e) {
e.printStackTrace();
}
}
}
文件客户端
import java.io.*;
import java.net.*;
public class FileClient {
private static final String SERVER_HOST = "localhost";
private static final int SERVER_PORT = 7777;
public static void main(String[] args) {
if (args.length < 1) {
System.out.println("使用方法:java FileClient <文件路径>");
return;
}
String filePath = args[0];
File file = new File(filePath);
if (!file.exists()) {
System.out.println("文件不存在:" + filePath);
return;
}
try (Socket socket = new Socket(SERVER_HOST, SERVER_PORT);
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
DataInputStream dis = new DataInputStream(socket.getInputStream());
FileInputStream fis = new FileInputStream(file)) {
System.out.println("连接服务器成功,开始上传文件...");
// 发送文件名和大小
dos.writeUTF(file.getName());
dos.writeLong(file.length());
// 发送文件内容
byte[] buffer = new byte[4096];
int read;
while ((read = fis.read(buffer)) != -1) {
dos.write(buffer, 0, read);
}
dos.flush();
// 接收服务器响应
String response = dis.readUTF();
System.out.println(response);
} catch (IOException e) {
e.printStackTrace();
}
}
}
常见使用示例
public class NetworkDemo {
public static void main(String[] args) {
// 演示线程化TCP服务器
System.out.println("=== TCP服务器 ===");
// 启动TCP服务器在单独线程
new Thread(() -> TCPServer.main(new String[]{})).start();
try {
Thread.sleep(1000); // 等待服务器启动
// 运行TCP客户端
System.out.println("\n=== TCP客户端 ===");
// 这里可以填写自动测试的消息
testTCPClient();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private static void testTCPClient() {
try (Socket socket = new Socket("localhost", 8888);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true)) {
String[] messages = {"你好服务器", "测试消息", "quit"};
for (String msg : messages) {
out.println(msg);
String response = in.readLine();
System.out.println("服务器响应:" + response);
Thread.sleep(200);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行说明
要运行这些程序:
-
TCP通信:
- 先运行
TCPServer.main() - 再运行
TCPClient.main()(可以运行多个客户端)
- 先运行
-
UDP通信:
- 先运行
UDPServer.main() - 再运行
UDPClient.main()
- 先运行
-
文件传输:
- 先运行
FileServer.main() - 再运行
FileClient,传入文件路径参数
- 先运行
重要特性
- TCP:可靠的面向连接的协议,适合需要可靠性保证的场景
- UDP:无连接协议,适合实时性要求高、允许丢包的场景
- 多线程处理:服务器可以同时处理多个客户端
- 资源管理:使用try-with-resources自动关闭资源
这个案例涵盖了Java网络编程的主要方面,可以作为学习和开发网络应用的参考,您可以根据自己的需求修改和扩展这些代码。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播