在Java里,网络编程主要是借助java.net包中的类和接口来达成网络通信。下面将介绍Java网络编程的基本概念、相关类和接口,同时给出示例代码。

1. 基本概念

  • TCP(传输控制协议):面向连接的、可靠的、基于字节流的传输协议。在进行数据传输前,需要先建立连接,传输完成后再断开连接。
  • UDP(用户数据报协议):无连接的、不可靠的传输协议。它在传输数据时无需建立连接,直接发送数据报。

2. 相关类和接口

TCP编程

  • java.net.Socket:代表客户端的套接字,用于与服务器建立连接并进行数据传输。
  • java.net.ServerSocket:代表服务器端的套接字,用于监听指定端口,等待客户端的连接请求。

UDP编程

  • java.net.DatagramSocket:用于发送和接收数据报包。
  • java.net.DatagramPacket:表示数据报包,包含要发送或接收的数据、目标地址和端口号。

3. 示例代码

TCP编程示例

下面是一个简单的TCP客户端 - 服务器程序示例。

// 服务器端代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {
    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(8888)) {
            System.out.println("服务器已启动,等待客户端连接...");
            try (Socket socket = serverSocket.accept();
                 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                 PrintWriter out = new PrintWriter(socket.getOutputStream(), true)) {
                System.out.println("客户端已连接:" + socket.getInetAddress());
                String inputLine;
                while ((inputLine = in.readLine()) != null) {
                    System.out.println("客户端消息:" + inputLine);
                    out.println("服务器已收到消息:" + inputLine);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

// 客户端代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class TCPClient {
    public static void main(String[] args) {
        try (Socket socket = new Socket("localhost", 8888);
             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());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

UDP编程示例

以下是一个简单的UDP客户端 - 服务器程序示例。

// 服务器端代码
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UDPServer {
    public static void main(String[] args) {
        try (DatagramSocket socket = new DatagramSocket(9999)) {
            byte[] receiveData = new byte[1024];
            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
            System.out.println("UDP服务器已启动,等待客户端消息...");
            socket.receive(receivePacket);
            String message = new String(receivePacket.getData(), 0, receivePacket.getLength());
            System.out.println("客户端消息:" + message);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

// 客户端代码
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPClient {
    public static void main(String[] args) {
        try (DatagramSocket socket = new DatagramSocket()) {
            InetAddress address = InetAddress.getByName("localhost");
            String message = "Hello, UDP Server!";
            byte[] sendData = message.getBytes();
            DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, address, 9999);
            socket.send(sendPacket);
            System.out.println("消息已发送:" + message);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这些示例展示了如何运用Java进行基本的TCP和UDP网络编程。在实际应用中,你可能需要处理更多的异常情况,同时要考虑网络性能和安全性等问题。