Java 使用 websocket 作为客户端向服务端发送消息

Java作为客户端向服务端发送消息:

首先导入maven依赖:
<dependency>
	<groupId>org.java-websocket</groupId>
	<artifactId>Java-WebSocket</artifactId>
	<version>1.3.8</version>
</dependency>
1. WebSocket客户端类如下:
  • excptMessage 用来接收服务端返回的消息
  • 构造方法的参数是连接websocket服务端的URI
  • 发送消息时调用send方法将消息发送给服务端
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
import java.net.URI;

public class MyWebSocketClient extends WebSocketClient {

    //用来接收数据
    private String excptMessage;

    //构造方法
    public MyWebSocketClient(URI serverUri) {
        super(serverUri);
        excptMessage = null;
    }

    //连接建立成功时调用该方法
    @Override
    public void onOpen(ServerHandshake serverHandshake) {
        System.out.println("连接成功!");
    }

    //收到来自服务端的消息时调用该方法
    @Override
    public void onMessage(String s) {
        System.out.println("收到消息:" + s);
        this.excptMessage = s;
    }

    //连接关闭时调用该方法
    @Override
    public void onClose(int i, String s, boolean b) {
        System.out.println("连接已断开!");
    }

    //出现错误时调用该方法
    @Override
    public void onError(Exception e) {
        System.out.println("连接出现错误!");
    }

    //发送消息
    public void sendMessage(String message){
        this.send(message);
        System.out.println("已发送消息:" + message);
    }

    //获取接收到的信息
    public String getExcptMessage() {
        if(excptMessage != null){
            String message = new String(excptMessage);
            excptMessage = null;
            return message;
        }
        return null;
    }
    
}
2. 测试类:
  • 实例 WebSocketClient 对象,和服务端建立连接
  • 为了防止发送消息时,抛出WebsocketNotConnectedException异常,所以要等客户端和服务端建立完连接后才可以发送消息,因此要设置一个循环来进行等待。
  • 发送完消息后,如果要获取服务端的响应消息,也要进行等待,直到服务端响应给我们数据以后才可以获取消息并输出,如果不进行等待的话,可能会抛出NullPointerException异常。
public class Test {
    public static void main(String[] args){
        String message = null;
        String data = "hi!";
        try {
            //实例WebSocketClient对象,并连接到WebSocket服务端
            MyWebSocketClient client = new MyWebSocketClient(new URI("ws://127.0.0.1:9999/"));
            client.connect();
            //等待服务端响应
            while (!client.getReadyState().equals(WebSocket.READYSTATE.OPEN)) {
                System.out.println("连接中···请稍后");
                Thread.sleep(1000);
            }
            //向WebSocket服务端发送数据
            client.send(data);
            //等待WebSocket服务端响应
            while((message = client.getExcptMessage())==null){
                System.out.println("服务忙等待...");
                Thread.sleep(1000);
            }
            //打印服务端返回的数据
            System.out.println("成功获取数据:" + message);
            //关闭连接
            client.close();
        } catch (URISyntaxException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return message;
    } 
    
}
  • 4
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
以下是一个简单的Java实现WebSocket客户端服务端发送指令及接收服务端返回信息并打印出来的示例代码: ```java import java.net.URI; import java.net.URISyntaxException; import java.nio.ByteBuffer; import java.util.Scanner; import org.java_websocket.client.WebSocketClient; import org.java_websocket.handshake.ServerHandshake; public class WebSocketExample extends WebSocketClient { public WebSocketExample(URI serverUri) { super(serverUri); } @Override public void onOpen(ServerHandshake handshakedata) { System.out.println("Connected to server"); } @Override public void onClose(int code, String reason, boolean remote) { System.out.println("Disconnected from server"); } @Override public void onMessage(String message) { System.out.println("Received message: " + message); } @Override public void onMessage(ByteBuffer message) { // Handle binary message if needed } @Override public void onError(Exception ex) { ex.printStackTrace(); } public static void main(String[] args) throws URISyntaxException { WebSocketExample client = new WebSocketExample(new URI("ws://localhost:8080/")); client.connect(); Scanner scanner = new Scanner(System.in); while (true) { String command = scanner.nextLine(); if (command.equals("exit")) { client.close(); break; } client.send(command); } } } ``` 在这个示例中,我们使用Java-WebSocket库来实现WebSocket客户端。我们创建了一个WebSocketExample类,继承WebSocketClient类,并实现了几个回调方法: - onOpen:当连接到服务器时触发 - onClose:当与服务器断开连接时触发 - onMessage:当接收到服务器发送的文本消息时触发 - onMessage(ByteBuffer message):当接收到服务器发送的二进制消息时触发 - onError:当出现错误时触发 在main方法中,我们创建了一个WebSocketExample实例并连接到服务器。然后,我们使用Scanner来读取用户输入的命令,并使用WebSocketExample实例的send方法将命令发送到服务器。如果用户输入“exit”,我们将关闭WebSocket连接并退出程序。 这个示例只是一个简单的WebSocket客户端,你需要根据你的需求来修改代码,例如处理服务器返回的二进制消息,或者处理错误情况。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值