开启你的编程学习之旅

云课堂提供高质量的编程课程,从入门到精通,助你成为技术大牛

立即开始学习

Java 编程入门

作者: 赵老师 更新: 2024-03-18 阅读: 51234 难度: 初级
学习工具

5. Java 网络编程

Java 提供了强大的网络编程能力,支持 TCP/IP 和 UDP 协议。

Socket 编程基础

TCP 客户端和服务器示例
// 服务器端代码 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 clientSocket = serverSocket.accept(); System.out.println("客户端连接成功: " + clientSocket.getInetAddress()); // 处理客户端请求 new ClientHandler(clientSocket).start(); } } catch (IOException e) { e.printStackTrace(); } } } class ClientHandler extends Thread { private Socket socket; public ClientHandler(Socket socket) { this.socket = socket; } @Override public void run() { try (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); out.println("服务器回复: " + message.toUpperCase()); } } 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); BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStream())); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader userInput = new BufferedReader( new InputStreamReader(System.in))) { System.out.println("已连接到服务器,请输入消息:"); String userMsg; while ((userMsg = userInput.readLine()) != null) { if ("exit".equalsIgnoreCase(userMsg)) break; out.println(userMsg); String response = in.readLine(); System.out.println("服务器响应: " + response); } } catch (IOException e) { e.printStackTrace(); } } }

UDP 编程

UDP 客户端和服务器
// UDP 服务器 import java.net.*; public class UDPServer { public static void main(String[] args) { try (DatagramSocket socket = new DatagramSocket(8888)) { System.out.println("UDP 服务器启动..."); byte[] buffer = new byte[1024]; while (true) { DatagramPacket packet = new DatagramPacket(buffer, buffer.length); socket.receive(packet); String message = new String(packet.getData(), 0, packet.getLength()); System.out.println("收到来自 " + packet.getAddress() + " 的消息: " + message); // 回复客户端 String response = "UDP 服务器已收到: " + message; byte[] responseData = response.getBytes(); DatagramPacket responsePacket = new DatagramPacket( responseData, responseData.length, packet.getAddress(), packet.getPort()); socket.send(responsePacket); } } catch (Exception e) { e.printStackTrace(); } } } // UDP 客户端 import java.net.*; import java.util.Scanner; public class UDPClient { public static void main(String[] args) { try (DatagramSocket socket = new DatagramSocket(); Scanner scanner = new Scanner(System.in)) { InetAddress serverAddress = InetAddress.getByName("localhost"); System.out.println("UDP 客户端启动,请输入消息:"); while (true) { String message = scanner.nextLine(); if ("exit".equalsIgnoreCase(message)) break; // 发送消息 byte[] sendData = message.getBytes(); DatagramPacket sendPacket = new DatagramPacket( sendData, sendData.length, serverAddress, 8888); socket.send(sendPacket); // 接收回复 byte[] receiveData = new byte[1024]; DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); socket.receive(receivePacket); String response = new String(receivePacket.getData(), 0, receivePacket.getLength()); System.out.println("服务器回复: " + response); } } catch (Exception e) { e.printStackTrace(); } } }
提示: 这是一个重要的概念,需要特别注意理解和掌握。
注意: 这是一个常见的错误点,请避免犯同样的错误。