引言

Java网络编程是Java语言中的重要组成部分,它使得Java程序能够通过网络与其他程序进行通信。本篇文章旨在深入浅出地讲解Java网络编程的基础知识,并通过实际案例进行教学,帮助读者更好地掌握这一技能。

Java网络编程基础

1. 网络编程概述

网络编程是指编写程序以实现网络上的数据传输。Java提供了丰富的类库来支持网络编程,其中最重要的是java.net包。

2. 套接字(Socket)

套接字是网络通信的基本构建块,它提供了两个程序之间的通信接口。Java中,套接字通过Socket类实现。

套接字类型

  • 流套接字(Stream Sockets):提供可靠的、面向连接的数据传输服务,如Socket
  • 数据报套接字(Datagram Sockets):提供无连接的、不可靠的数据传输服务,如DatagramSocket

3. 网络协议

Java网络编程依赖于各种网络协议,如TCP/IP、UDP等。

TCP/IP

TCP/IP是互联网的基本协议,它确保数据的可靠传输。

UDP

UDP是一种无连接的协议,适用于对实时性要求较高的应用。

实战案例:TCP客户端与服务端通信

1. 创建TCP服务端

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

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

        Socket socket = serverSocket.accept();
        System.out.println("客户端连接成功");

        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            System.out.println("客户端:" + inputLine);
            out.println("服务器:" + inputLine);
        }

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

2. 创建TCP客户端

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

public class TCPClient {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 1234);
        System.out.println("连接到服务器...");

        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));

        String userInput;
        while ((userInput = stdIn.readLine()) != null) {
            out.println(userInput);
            System.out.println("服务器:" + in.readLine());
        }

        out.close();
        in.close();
        stdIn.close();
        socket.close();
    }
}

实战案例:UDP客户端与服务端通信

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...");

        byte[] receiveData = new byte[1024];
        DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
        serverSocket.receive(receivePacket);
        String sentence = new String(receivePacket.getData(), 0, receivePacket.getLength());
        System.out.println("客户端:" + sentence);

        String modifiedSentence = "你好,客户端!";
        byte[] sendData = modifiedSentence.getBytes();
        DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, receivePacket.getAddress(), receivePacket.getPort());
        serverSocket.send(sendPacket);
        serverSocket.close();
    }
}

2. 创建UDP客户端

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

public class UDPClient {
    public static void main(String[] args) throws IOException {
        InetAddress IPAddress = InetAddress.getByName("localhost");
        byte[] sendData = "Hello Server".getBytes();
        DatagramSocket socket = new DatagramSocket();
        DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
        socket.send(sendPacket);
        socket.close();
    }
}

总结

本文介绍了Java网络编程的基础知识和两个实战案例,通过这些案例,读者可以更好地理解Java网络编程的概念和应用。在实际开发中,网络编程是一个复杂且灵活的领域,需要不断地学习和实践。