引言
网络编程是Java的重要应用领域。本文介绍Java网络编程的基础知识和实战应用。
一、TCP Socket编程
1.1 服务器端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| public class TCPServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(8080); System.out.println("服务器启动,监听端口8080..."); while (true) { Socket socket = serverSocket.accept(); System.out.println("客户端连接: " + socket.getInetAddress()); BufferedReader reader = new BufferedReader( new InputStreamReader(socket.getInputStream())); String message = reader.readLine(); System.out.println("收到消息: " + message); PrintWriter writer = new PrintWriter(socket.getOutputStream(), true); writer.println("服务器收到: " + message); socket.close(); } } }
|
1.2 客户端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public class TCPClient { public static void main(String[] args) throws IOException { Socket socket = new Socket("localhost", 8080); PrintWriter writer = new PrintWriter(socket.getOutputStream(), true); writer.println("Hello Server!"); BufferedReader reader = new BufferedReader( new InputStreamReader(socket.getInputStream())); String response = reader.readLine(); System.out.println("服务器响应: " + response); socket.close(); } }
|
二、UDP Socket编程
2.1 UDP服务器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public class UDPServer { public static void main(String[] args) throws IOException { DatagramSocket socket = new DatagramSocket(9999); 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("收到消息: " + message); String response = "服务器收到"; byte[] data = response.getBytes(); DatagramPacket sendPacket = new DatagramPacket( data, data.length, packet.getAddress(), packet.getPort()); socket.send(sendPacket); } } }
|
三、HTTP请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| public String sendGet(String url) throws IOException { HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5000); int responseCode = conn.getResponseCode(); if (responseCode == 200) { BufferedReader reader = new BufferedReader( new InputStreamReader(conn.getInputStream())); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); return response.toString(); } return null; }
public String sendPost(String url, String params) throws IOException { HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); OutputStream os = conn.getOutputStream(); os.write(params.getBytes()); os.flush(); BufferedReader reader = new BufferedReader( new InputStreamReader(conn.getInputStream())); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); return response.toString(); }
|
四、多线程服务器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| public class MultiThreadServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(8080); System.out.println("多线程服务器启动..."); while (true) { Socket socket = serverSocket.accept(); new Thread(new ClientHandler(socket)).start(); } } }
class ClientHandler implements Runnable { private Socket socket; public ClientHandler(Socket socket) { this.socket = socket; } @Override public void run() { 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); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
|
总结
Java网络编程核心:
- TCP:可靠的面向连接通信
- UDP:快速的无连接通信
- HTTP:应用层协议
- 多线程:并发处理客户端请求
参考资料