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 注解进行消息的处理。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WebSocket是一种基于TCP协议的全双工通信协议,可以在客户端和服务器之间建立实时的双向通信。Java和JS都提供了对WebSocket的支持,下面分别介绍它们的代码机制。 JavaWebSocket代码机制: 1. 引入WebSocket依赖 在Maven项目,可以在pom.xml文件添加以下依赖: ``` <dependency> <groupId>javax.websocket</groupId> <artifactId>javax.websocket-api</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>org.glassfish.tyrus</groupId> <artifactId>tyrus-server</artifactId> <version>1.13.1</version> </dependency> ``` 2. 创建服务器端点 使用javax.websocket.server.ServerEndpoint注解创建WebSocket服务器端点,指定路径和处理类: ``` @ServerEndpoint("/websocket") public class WebSocketServer { // 处理连接建立事件 @OnOpen public void onOpen(Session session) { // ... } // 处理收到消息事件 @OnMessage public void onMessage(String message, Session session) { // ... } // 处理连接关闭事件 @OnClose public void onClose(Session session) { // ... } // 处理错误事件 @OnError public void onError(Throwable error) { // ... } } ``` 3. 启动WebSocket服务器 使用javax.websocket.server.ServerContainer启动WebSocket服务器,指定端口和路径: ``` Server server = new Server("localhost", 8080, "/path"); ServerContainer container = ContainerProvider.getWebSocketContainer(); container.addEndpoint(server); server.start(); ``` 4. 创建WebSocket客户端 使用javax.websocket.ClientEndpoint注解创建WebSocket客户端,指定路径和处理类: ``` @ClientEndpoint("/websocket") public class WebSocketClient { // 处理连接建立事件 @OnOpen public void onOpen(Session session) { // ... } // 处理收到消息事件 @OnMessage public void onMessage(String message, Session session) { // ... } // 处理连接关闭事件 @OnClose public void onClose(Session session) { // ... } // 处理错误事件 @OnError public void onError(Throwable error) { // ... } } ``` 5. 连接WebSocket服务器 使用javax.websocket.ClientManager连接WebSocket服务器,指定路径和URI: ``` ClientEndpointConfig config = ClientEndpointConfig.Builder.create().build(); ClientManager client = ClientManager.createClient(); client.connectToServer(new WebSocketClient(), config, new URI("ws://localhost:8080/path")); ``` JS的WebSocket代码机制: 1. 创建WebSocket对象 使用WebSocket构造函数创建WebSocket对象,指定服务器地址和路径: ``` var socket = new WebSocket("ws://localhost:8080/path"); ``` 2. 注册事件处理程序 使用WebSocket对象的onopen、onmessage、onclose和onerror属性注册事件处理程序: ``` socket.onopen = function(event) { // ... }; socket.onmessage = function(event) { // ... }; socket.onclose = function(event) { // ... }; socket.onerror = function(event) { // ... }; ``` 3. 发送消息 使用WebSocket对象的send方法发送消息: ``` socket.send("Hello, server!"); ``` 以上便是Java和JS的WebSocket代码机制的详解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值