您的位置:

Java Socket 编程入门指南

Java Socket 编程是一个常见的网络编程技术,它允许程序员在不同计算机之间建立网络通信连接。在本指南中,我们将深入介绍 Java Socket 编程及其基本组成部分,以及如何使用 Socket 完成网络通信。

一、Socket 概述

Java Socket 是网络编程中最基本的部分。Socket 类封装了一个套接字,它是一个 IP 地址和端口号的组合。通过 Socket,我们可以在不同的计算机之间建立连接通信。Socket 以 TCP 或 UDP 协议传输数据,它提供了一种简单而又强大的客户端/服务器编程方法。

二、Socket 创建

Java Socket 类有两种构造函数,它们各自用于创建不同类型的套接字。
  • 创建 TCP Socket:
    Socket socket = new Socket(String host, int port);
  • 创建 UDP Socket:
    DatagramSocket socket = new DatagramSocket(int port);

三、TCP Socket 通信

TCP 协议提供可靠的面向连接的服务,它使用三次握手建立连接,保证了数据的可靠传输。在 TCP Socket 通信中,客户端首先向服务器发起连接请求,服务器接受请求并返回确认信息,之后客户端和服务器之间可以进行数据的传输。 下面是一个使用 TCP Socket 客户端和服务器的示例代码:

服务器端:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {
    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(8888);
        Socket socket = server.accept(); // 监听客户端连接
        InputStream in = socket.getInputStream();
        OutputStream out = socket.getOutputStream();

        byte[] data = new byte[1024];
        int len = in.read(data);
        String request = new String(data, 0, len);
        System.out.println("接收到客户端请求:" + request);

        String response = "欢迎使用 Socket 编程!";
        out.write(response.getBytes());

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

客户端:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class TCPClient {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("127.0.0.1", 8888);
        InputStream in = socket.getInputStream();
        OutputStream out = socket.getOutputStream();

        String request = "Socket 编程示例";
        out.write(request.getBytes());

        byte[] data = new byte[1024];
        int len = in.read(data);
        String response = new String(data, 0, len);
        System.out.println("接收到服务器响应:" + response);

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

四、UDP Socket 通信

UDP 协议提供不可靠的无连接服务,它没有建立连接的过程,并不保证数据传输的可靠性。在 UDP Socket 通信中,客户端和服务器之间通过数据报进行通信。 下面是一个使用 UDP Socket 的示例代码:

服务器端:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UDPServer {
    public static void main(String[] args) throws IOException {
        DatagramSocket server = new DatagramSocket(8888);

        byte[] data = new byte[1024];
        DatagramPacket packet = new DatagramPacket(data, data.length);
        server.receive(packet);

        String request = new String(packet.getData(), 0, packet.getLength());
        System.out.println("接收到客户端请求:" + request);

        String response = "欢迎使用 Socket 编程!";
        DatagramPacket outPacket = new DatagramPacket(response.getBytes(), response.getBytes().length, packet.getAddress(), packet.getPort());
        server.send(outPacket);

        server.close();
    }
}

客户端:

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) throws IOException {
        DatagramSocket client = new DatagramSocket();

        String request = "Socket 编程示例";
        DatagramPacket outPacket = new DatagramPacket(request.getBytes(), request.getBytes().length, InetAddress.getByName("127.0.0.1"), 8888);
        client.send(outPacket);

        byte[] data = new byte[1024];
        DatagramPacket inPacket = new DatagramPacket(data, data.length);
        client.receive(inPacket);

        String response = new String(inPacket.getData(), 0, inPacket.getLength());
        System.out.println("接收到服务器响应:" + response);

        client.close();
    }
}

五、总结

本文介绍了 Java Socket 编程的基本概念、创建、TCP Socket 和 UDP Socket 通信。高效的 Socket 编程可以用于实现各种网络应用程序,例如:Web 服务器、聊天程序、文件传输程序等。学好 Socket 编程,对于高效的网络编程至关重要。