引言

Java网络编程是Java编程语言中一个重要的组成部分,它使得Java程序能够与其他计算机进行通信。本文将为您提供一个详细的入门指南,帮助您轻松掌握Java网络编程。

1. Java网络编程基础

1.1 网络协议

在开始Java网络编程之前,了解一些基本的网络协议是必要的。TCP(传输控制协议)和UDP(用户数据报协议)是两种最常用的网络协议。

  • TCP:提供可靠的、面向连接的服务。它确保数据的顺序、完整性和无重复传输。
  • UDP:提供不可靠的无连接服务。它不保证数据的顺序或完整性,但速度快。

1.2 Java网络编程API

Java提供了丰富的API来支持网络编程,主要包括java.net包中的类。

2. Java网络编程实例

下面将通过几个实例来展示Java网络编程的基本应用。

2.1 TCP客户端与服务器

2.1.1 TCP服务器端

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

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

        try (Socket socket = serverSocket.accept()) {
            BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintWriter output = new PrintWriter(socket.getOutputStream(), true);

            String clientMessage = input.readLine();
            System.out.println("收到客户端消息:" + clientMessage);

            output.println("收到你的消息:" + clientMessage);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            serverSocket.close();
        }
    }
}

2.1.2 TCP客户端

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

public class TCPClient {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 8080);

        PrintWriter output = new PrintWriter(socket.getOutputStream(), true);
        BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
        BufferedReader serverInput = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        String userInput;
        while ((userInput = input.readLine()) != null) {
            output.println(userInput);
            System.out.println("服务器回复:" + serverInput.readLine());
        }

        input.close();
        output.close();
        serverInput.close();
        socket.close();
    }
}

2.2 UDP编程实例

2.2.1 UDP服务器端

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

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

        try (DatagramSocket socket = new DatagramSocket()) {
            byte[] receiveData = new byte[1024];
            byte[] sendData = new byte[1024];

            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
            socket.receive(receivePacket);
            String modifiedSentence = new String(receivePacket.getData(), 0, receivePacket.getLength());
            System.out.println("收到:" + modifiedSentence);

            InetAddress address = receivePacket.getAddress();
            int port = receivePacket.getPort();

            String modifiedSentenceResponse = "来自服务器的响应:" + modifiedSentence;
            sendData = modifiedSentenceResponse.getBytes();
            DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, address, port);
            socket.send(sendPacket);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            serverSocket.close();
        }
    }
}

2.2.2 UDP客户端

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

public class UDPClient {
    public static void main(String[] args) throws IOException {
        String host = "localhost";
        int port = 9876;

        String sentence = "你好,服务器!";
        byte[] sendData = sentence.getBytes();
        InetAddress IPAddress = InetAddress.getByName(host);

        DatagramSocket socket = new DatagramSocket();
        DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
        socket.send(sendPacket);
        socket.close();
    }
}

3. 总结

本文提供了一个Java网络编程的入门全攻略,包括基础知识、TCP和UDP编程实例。通过这些实例,您应该能够理解Java网络编程的基本概念和应用。继续实践和探索,您将能够掌握更高级的网络编程技术。