引言

在互联网时代,网络编程已经成为计算机科学领域的重要分支。Java作为一种跨平台、面向对象的编程语言,在网络编程领域有着广泛的应用。本文将从零开始,详细介绍Java网络编程的核心技术,帮助读者轻松掌握网络通信的精髓。

Java网络编程基础

1. Java网络编程概述

Java网络编程主要涉及两个核心类:InetAddressSocket

  • InetAddress类用于获取IP地址信息,包括IPv4和IPv6地址。
  • Socket类用于实现网络通信,包括客户端和服务器端。

2. 网络编程模型

Java网络编程主要采用两种模型:阻塞式和非阻塞式。

  • 阻塞式:在通信过程中,程序会一直等待操作完成,直到操作成功或失败。
  • 非阻塞式:在通信过程中,程序可以继续执行其他任务,不会因为等待操作而阻塞。

Java网络编程核心技术

1. TCP编程

TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

客户端编程

import java.io.*;
import java.net.*;

public class TcpClient {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("127.0.0.1", 12345);
        OutputStream os = socket.getOutputStream();
        PrintWriter out = new PrintWriter(os, true);
        out.println("Hello, Server!");

        InputStream is = socket.getInputStream();
        BufferedReader in = new BufferedReader(new InputStreamReader(is));
        String line;
        while ((line = in.readLine()) != null) {
            System.out.println("Server: " + line);
        }

        socket.close();
    }
}

服务器端编程

import java.io.*;
import java.net.*;

public class TcpServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(12345);
        System.out.println("Server is running...");

        Socket socket = serverSocket.accept();
        System.out.println("Client connected!");

        InputStream is = socket.getInputStream();
        BufferedReader in = new BufferedReader(new InputStreamReader(is));
        String line;
        while ((line = in.readLine()) != null) {
            System.out.println("Client: " + line);
        }

        OutputStream os = socket.getOutputStream();
        PrintWriter out = new PrintWriter(os, true);
        out.println("Hello, Client!");

        socket.close();
        serverSocket.close();
    }
}

2. UDP编程

UDP(用户数据报协议)是一种无连接的、不可靠的、基于数据报的传输层通信协议。

客户端编程

import java.io.*;
import java.net.*;

public class UdpClient {
    public static void main(String[] args) throws IOException {
        DatagramSocket socket = new DatagramSocket();
        InetAddress address = InetAddress.getByName("127.0.0.1");
        byte[] buffer = "Hello, Server!".getBytes();
        DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, 12345);
        socket.send(packet);

        byte[] receiveData = new byte[1024];
        DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
        socket.receive(receivePacket);
        String modifiedMessage = new String(receivePacket.getData(), 0, receivePacket.getLength());
        System.out.println("Received: " + modifiedMessage);

        socket.close();
    }
}

服务器端编程

import java.io.*;
import java.net.*;

public class UdpServer {
    public static void main(String[] args) throws IOException {
        DatagramSocket socket = new DatagramSocket(12345);
        System.out.println("Server is running...");

        byte[] receiveData = new byte[1024];
        DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
        socket.receive(receivePacket);
        String modifiedMessage = new String(receivePacket.getData(), 0, receivePacket.getLength());
        System.out.println("Received: " + modifiedMessage);

        InetAddress address = receivePacket.getAddress();
        int port = receivePacket.getPort();
        String message = "Hello, Client!";
        byte[] sendData = message.getBytes();
        DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, address, port);
        socket.send(sendPacket);

        socket.close();
    }
}

3. HTTP编程

HTTP(超文本传输协议)是一种应用层协议,用于在Web浏览器和服务器之间传输数据。

客户端编程

import java.io.*;
import java.net.*;

public class HttpClient {
    public static void main(String[] args) throws IOException {
        URL url = new URL("http://www.example.com");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");

        int responseCode = connection.getResponseCode();
        System.out.println("Response Code: " + responseCode);

        BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();

        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        System.out.println(response.toString());
    }
}

服务器端编程

import java.io.*;
import java.net.*;

public class HttpServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8080);
        System.out.println("Server is running...");

        while (true) {
            Socket socket = serverSocket.accept();
            System.out.println("Client connected!");

            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String request = in.readLine();
            System.out.println("Request: " + request);

            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            out.println("HTTP/1.1 200 OK");
            out.println("Content-Type: text/html");
            out.println();
            out.println("<html><body><h1>Hello, World!</h1></body></html>");

            socket.close();
        }
    }
}

总结

本文从Java网络编程基础、TCP编程、UDP编程和HTTP编程等方面,详细介绍了Java网络编程的核心技术。通过学习本文,读者可以轻松掌握Java网络编程的精髓,为今后的网络应用开发打下坚实的基础。