JAVA 中 Socket 和 WebSocket 区别

区别:

Socket: Socket是位于java.net包下的一个类,是 Java 提供的用于在客户端和服务器之间建立网络通信的底层套接字接口,用于传输层的网络通信。

WebSocket: WebSocket 是一种基于 TCP 协议的通信协议,建立在 Socket 的基础上,提供了用于实时双向通信的高级接口。

实现方法:

Socket: 使用 Socket 类可以创建 TCP/IP 连接并进行数据传输。客户端使用 Socket 和服务器建立连接,并通过输入流和输出流进行数据的发送和接收。

WebSocket: 使用 WebSocket 协议需要对服务器进行额外的配置。客户端与服务器通过 HTTP 协议进行握手,建立连接后,可以通过 WebSocket 的 API 进行实时的双向通信。

Socket 示例:

客户端:

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

public class SocketClient {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("localhost", 8080);
            OutputStream outputStream = socket.getOutputStream();
            outputStream.write("Hello, Server!".getBytes());
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

服务器:

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

public class SocketServer {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(8080);
            Socket socket = serverSocket.accept();
            InputStream inputStream = socket.getInputStream();
            byte[] buffer = new byte[4096];
            int bytesRead = inputStream.read(buffer);
            String message = new String(buffer, 0, bytesRead);
            System.out.println("Received message from client: " + message);
            socket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

WebSocket 示例:

import javax.websocket.*;
import java.net.URI;

@ClientEndpoint
public class WebSocketClient {
    @OnMessage
    public void onMessage(String message) {
        System.out.println("Received message from server: " + message);
    }

    public static void main(String[] args) {
        WebSocketContainer container = ContainerProvider.getWebSocketContainer();
        try {
            Session session = container.connectToServer(WebSocketClient.class, new URI("ws://localhost:8080/websocket"));
            session.getBasicRemote().sendText("Hello, Server!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

@ServerEndpoint("/websocket")
public class WebSocketServer {
    @OnMessage
    public String onMessage(String message) {
        System.out.println("Received message from client: " + message);
        return "Server received your message: " + message;
    }
}

上面注解是 Java WebSocket API(JSR 356)中提供的一些标准注解,用于在 Java 中创建 WebSocket 客户端和服务器端的端点。它们的具体含义如下:

@ClientEndpoint: @ClientEndpoint 是一个用于标注 WebSocket 客户端端点的注解。通过在一个类上使用 @ClientEndpoint 注解,将该类标记为 WebSocket 客户端的端点,表示该类将处理与服务器的连接和消息交互。可以在该类中定义处理消息的方法,如 @OnMessage。

@OnMessage: @OnMessage 是一个用于标注 WebSocket 终端的注解,指示一个方法将用于处理接收到的 WebSocket 消息。当收到消息时,WebSocket 运行时将调用带有 @OnMessage 注解的方法,并将接收到的消息作为参数传递给该方法。该方法可以根据需要进行消息的处理和响应。

@ServerEndpoint(“/websocket”): @ServerEndpoint 是一个用于标注 WebSocket 服务器端终端的注解。通过在一个类上使用 @ServerEndpoint 注解,并指定一个 URI 路径参数,将该类标记为 WebSocket 服务器端的端点。当客户端连接到指定的 URI 时,WebSocket 运行时将创建一个新的该类的实例,并将其用作与客户端的通信终端。类中可以定义多个方法,并使用 @OnMessage 注解进行消息的处理。

你可能感兴趣的:(Java,java,websocket,python)