引言

Java网络编程是Java语言的核心特性之一,它允许程序与网络中的其他程序进行通信。掌握Java网络编程对于开发分布式系统和网络应用至关重要。本文将详细介绍Java网络编程的基础知识,并通过实战项目帮助读者快速上手。

Java网络编程基础

1. 网络通信模型

Java网络编程主要基于TCP/IP协议族。了解网络通信模型对于编写高效的网络程序至关重要。以下是常见的网络通信模型:

  • 客户端-服务器模型:客户端主动发起连接,服务器被动等待连接。
  • 服务器端模型:服务器主动发起连接,客户端被动等待连接。

2. Java网络编程API

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

  • java.net.InetAddress:用于获取IP地址信息。
  • java.net.Socket:用于创建客户端和服务器端的套接字。
  • java.net.ServerSocket:用于创建服务器端的套接字。
  • java.io.InputStreamjava.io.OutputStream:用于读取和写入数据流。

实战项目:简易文件传输服务

1. 项目概述

本实战项目将实现一个简易的文件传输服务,客户端可以上传和下载文件。

2. 技术选型

  • Java网络编程API
  • java.io.File

3. 项目实现

3.1 服务器端

服务器端负责监听客户端的连接请求,接收文件上传请求,并将文件存储到服务器。

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

public class FileServer {
    public static void main(String[] args) throws IOException {
        int port = 8080;
        ServerSocket serverSocket = new ServerSocket(port);
        System.out.println("Server is listening on port " + port);

        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 {
            DataInputStream dis = new DataInputStream(clientSocket.getInputStream());
            String fileName = dis.readUTF();
            File outputFile = new File(fileName);
            DataOutputStream dos = new DataOutputStream(new FileOutputStream(outputFile));
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = dis.read(buffer)) != -1) {
                dos.write(buffer, 0, bytesRead);
            }
            dos.close();
            dis.close();
            clientSocket.close();
            System.out.println("File downloaded: " + fileName);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3.2 客户端

客户端负责连接服务器,发送文件上传请求,并将文件发送给服务器。

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

public class FileClient {
    public static void main(String[] args) throws IOException {
        String serverAddress = "127.0.0.1";
        int port = 8080;
        Socket socket = new Socket(serverAddress, port);
        DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
        String fileName = "example.txt";
        dos.writeUTF(fileName);

        FileInputStream fis = new FileInputStream(fileName);
        byte[] buffer = new byte[1024];
        int bytesRead;
        while ((bytesRead = fis.read(buffer)) != -1) {
            dos.write(buffer, 0, bytesRead);
        }
        fis.close();
        dos.close();
        socket.close();
        System.out.println("File uploaded: " + fileName);
    }
}

总结

通过以上实战项目,读者可以掌握Java网络编程的基本知识和技能。在实际开发过程中,可以根据需求对项目进行扩展,例如添加文件加密、压缩等功能。不断实践和总结,相信读者能够熟练掌握Java网络编程。