返回

Java Socket 编程(附案例详解)

后端

Java Socket 网络编程简介

Java Socket 是 Java 提供的一种网络编程 API,它允许 Java 程序通过网络与其他计算机进行通信。Socket 编程可以实现多种网络通信方式,包括 TCP、UDP、HTTP 等。

Socket 基础概念

在 Socket 编程中,有两个重要的概念:客户端和服务端。

  • 客户端 :发起网络连接的一方,通常是用户计算机或应用程序。
  • 服务端 :接受网络连接的一方,通常是服务器计算机或应用程序。

Java Socket 编程步骤

Java Socket 编程通常包括以下步骤:

  1. 创建 Socket 对象。
  2. 连接到服务端。
  3. 发送和接收数据。
  4. 关闭连接。

Java Socket 编程案例

案例一:TCP 客户端和服务端

本案例演示如何使用 Java Socket 编程实现一个简单的 TCP 客户端和服务端。

客户端代码:

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

public class TCPClient {

    public static void main(String[] args) {
        try {
            // 创建 Socket 对象
            Socket socket = new Socket("localhost", 8888);

            // 获取输出流
            OutputStream os = socket.getOutputStream();

            // 发送数据
            os.write("Hello, server!".getBytes());

            // 获取输入流
            InputStream is = socket.getInputStream();

            // 接收数据
            byte[] buffer = new byte[1024];
            int length = is.read(buffer);

            // 打印接收到的数据
            System.out.println(new String(buffer, 0, length));

            // 关闭连接
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

服务端代码:

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

public class TCPServer {

    public static void main(String[] args) {
        try {
            // 创建 ServerSocket 对象
            ServerSocket serverSocket = new ServerSocket(8888);

            // 等待客户端连接
            Socket socket = serverSocket.accept();

            // 获取输入流
            InputStream is = socket.getInputStream();

            // 读取数据
            byte[] buffer = new byte[1024];
            int length = is.read(buffer);

            // 打印接收到的数据
            System.out.println(new String(buffer, 0, length));

            // 获取输出流
            OutputStream os = socket.getOutputStream();

            // 发送数据
            os.write("Hello, client!".getBytes());

            // 关闭连接
            socket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

案例二:UDP 客户端和服务端

本案例演示如何使用 Java Socket 编程实现一个简单的 UDP 客户端和服务端。

客户端代码:

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

public class UDPClient {

    public static void main(String[] args) {
        try {
            // 创建 DatagramSocket 对象
            DatagramSocket socket = new DatagramSocket();

            // 发送数据
            byte[] data = "Hello, server!".getBytes();
            DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getByName("localhost"), 8888);
            socket.send(packet);

            // 接收数据
            byte[] buffer = new byte[1024];
            packet = new DatagramPacket(buffer, buffer.length);
            socket.receive(packet);

            // 打印接收到的数据
            System.out.println(new String(buffer, 0, packet.getLength()));

            // 关闭连接
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

服务端代码:

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

public class UDPServer {

    public static void main(String[] args) {
        try {
            // 创建 DatagramSocket 对象
            DatagramSocket socket = new DatagramSocket(8888);

            // 接收数据
            byte[] buffer = new byte[1024];
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
            socket.receive(packet);

            // 打印接收到的数据
            System.out.println(new String(buffer, 0, packet.getLength()));

            // 发送数据
            byte[] data = "Hello, client!".getBytes();
            packet = new DatagramPacket(data, data.length, packet.getAddress(), packet.getPort());
            socket.send(packet);

            // 关闭连接
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

总结

Java Socket 编程是 Java 网络编程的基础,通过学习 Java Socket 编程,您可以快速掌握 Java 网络编程的基础知识,并实现各种网络应用。