引言

在网络技术飞速发展的今天,Java作为一种跨平台、高性能的编程语言,在网络编程领域有着广泛的应用。无论是构建Web应用、移动应用还是分布式系统,Java都显示出了其强大的生命力。本文将带您从Java网络编程的基础知识出发,逐步深入,最终实现一个简单的网络应用。

一、Java网络编程基础

1.1 网络模型

了解Java网络编程,首先要熟悉网络模型。Java网络编程主要基于TCP/IP模型,该模型将网络通信分为四层:应用层、传输层、网络层和数据链路层。

1.2 Java网络编程API

Java提供了丰富的网络编程API,主要包括以下几种:

  • java.net包:提供了基本的网络操作,如URL、InetAddress等。
  • java.io包:提供了文件和网络流操作,如Socket、ServerSocket等。
  • java.nio包:提供了非阻塞I/O操作,如ByteBuffer、Selector等。

1.3 Socket编程

Socket是网络编程中的基石,它允许两个程序在网络上进行通信。Java中的Socket编程主要包括客户端和服务器端。

二、Java网络编程实战

2.1 简单的TCP服务器端

以下是一个简单的TCP服务器端示例代码:

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

public class SimpleServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8080);
        System.out.println("服务器启动,监听端口8080...");

        while (true) {
            Socket clientSocket = serverSocket.accept();
            new Thread(new ClientHandler(clientSocket)).start();
        }
    }
}

class ClientHandler implements Runnable {
    private Socket clientSocket;

    public ClientHandler(Socket socket) {
        this.clientSocket = socket;
    }

    @Override
    public void run() {
        try {
            BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);

            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                System.out.println("客户端:" + inputLine);
                out.println("服务器:" + inputLine);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                clientSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

2.2 简单的TCP客户端

以下是一个简单的TCP客户端示例代码:

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

public class SimpleClient {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 8080);
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

        out.println("你好,服务器!");
        System.out.println("服务器回复:" + in.readLine());
    }
}

2.3 简单的HTTP服务器

以下是一个简单的HTTP服务器示例代码:

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

public class SimpleHttpServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8080);
        System.out.println("HTTP服务器启动,监听端口8080...");

        while (true) {
            Socket clientSocket = serverSocket.accept();
            new Thread(new ClientHandler(clientSocket)).start();
        }
    }
}

class ClientHandler implements Runnable {
    private Socket clientSocket;

    public ClientHandler(Socket socket) {
        this.clientSocket = socket;
    }

    @Override
    public void run() {
        try {
            BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);

            String requestLine = in.readLine();
            System.out.println("请求行:" + requestLine);

            if (requestLine != null && requestLine.contains("GET /index.html")) {
                String response = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n" +
                        "<html><body><h1>欢迎来到我的网站!</h1></body></html>";
                out.println(response);
            }

            in.close();
            out.close();
            clientSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

三、总结

通过本文的学习,您应该已经对Java网络编程有了初步的了解。从基础的网络模型、API到实际应用,我们逐步搭建了一个简单的网络应用。希望本文能对您在Java网络编程领域的学习有所帮助。在今后的学习和实践中,请不断深入,探索更多高级的网络编程技术。