引言

Java网络编程是Java语言的核心组成部分,它使得Java程序能够与其他计算机进行通信和数据交换。本文将带你从零开始,逐步掌握Java网络编程的基础知识,并通过实战案例帮助你轻松上手。

第一部分:Java网络编程基础

1.1 Java网络编程简介

Java网络编程主要依赖于Java标准库中的java.net包,该包提供了用于网络通信的类和接口。

1.2 网络模型

在Java网络编程中,我们通常使用TCP/IP模型。该模型将网络通信分为四层:应用层、传输层、网络层和数据链路层。

1.3 Java网络编程基本类

  • InetAddress:用于获取IP地址
  • Socket:用于创建客户端和服务器端
  • ServerSocket:用于创建服务器端
  • InputStreamOutputStream:用于处理数据流

第二部分:创建TCP客户端

2.1 创建TCP客户端

下面是一个简单的TCP客户端示例,用于向服务器发送数据并接收响应。

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

public class TCPClient {
    public static void main(String[] args) throws IOException {
        String hostname = "localhost";
        int port = 1234;

        Socket socket = new Socket(hostname, port);
        OutputStream out = socket.getOutputStream();
        PrintWriter writer = new PrintWriter(out, true);

        writer.println("Hello, Server!");

        InputStream in = socket.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));

        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println("Server response: " + line);
        }

        socket.close();
    }
}

2.2 创建TCP服务器

下面是一个简单的TCP服务器示例,用于接收客户端连接并处理请求。

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

public class TCPServer {
    public static void main(String[] args) throws IOException {
        int port = 1234;

        ServerSocket serverSocket = new ServerSocket(port);
        System.out.println("Server is listening on port " + port);

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

            InputStream in = socket.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));

            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println("Client sent: " + line);
                PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
                writer.println("Received: " + line);
            }

            socket.close();
        }
    }
}

第三部分:创建UDP客户端

3.1 创建UDP客户端

下面是一个简单的UDP客户端示例,用于向服务器发送数据并接收响应。

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

public class UDPSocketClient {
    public static void main(String[] args) throws IOException {
        String hostname = "localhost";
        int port = 1234;

        DatagramSocket socket = new DatagramSocket();
        InetAddress address = InetAddress.getByName(hostname);

        String message = "Hello, Server!";
        byte[] buf = message.getBytes();
        DatagramPacket packet = new DatagramPacket(buf, buf.length, address, port);

        socket.send(packet);

        buf = new byte[100];
        packet = new DatagramPacket(buf, buf.length);
        socket.receive(packet);

        String received = new String(packet.getData(), 0, packet.getLength());
        System.out.println("Server response: " + received);

        socket.close();
    }
}

3.2 创建UDP服务器

下面是一个简单的UDP服务器示例,用于接收客户端数据并发送响应。

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

public class UDPSocketServer {
    public static void main(String[] args) throws IOException {
        int port = 1234;

        DatagramSocket socket = new DatagramSocket(port);
        byte[] buf = new byte[100];

        System.out.println("Server is listening on port " + port);

        while (true) {
            DatagramPacket packet = new DatagramPacket(buf, buf.length);
            socket.receive(packet);

            String received = new String(packet.getData(), 0, packet.getLength());
            System.out.println("Client sent: " + received);

            InetAddress address = packet.getAddress();
            int portNum = packet.getPort();
            String response = "Received: " + received;
            byte[] bufResponse = response.getBytes();
            DatagramPacket packetResponse = new DatagramPacket(bufResponse, bufResponse.length, address, portNum);
            socket.send(packetResponse);
        }
    }
}

总结

通过本文的学习,你已经掌握了Java网络编程的基础知识,并能够通过实战案例创建TCP和UDP客户端和服务器。希望这些知识能够帮助你更好地理解和应用Java网络编程。