wstcl 2025-01-16 16:50 采纳率: 38.1%
浏览 30

C#写的客户端连接java写的websocket服务端报错

用C#写一个websocket客户端,代码如下

using System;
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;

class Program
{
    static void Main(string[] args)
    {

        Method1();

        Console.ReadKey();
    }

    public static async Task Method1()
    {

        var clientWebSocket = new ClientWebSocket();
        await clientWebSocket.ConnectAsync(new Uri("ws://localhost:1998/WebSocket/testWebSocket"), CancellationToken.None);


        Console.WriteLine("Connected!");

        // Send message to server
        var msg = "你好服务器!";
        var buffer = System.Text.Encoding.UTF8.GetBytes(msg);
        await clientWebSocket.SendAsync(new ArraySegment<byte>(buffer), WebSocketMessageType.Text, true, CancellationToken.None);

        // Receive message from server
        var receiveBuffer = new byte[1024 * 4];
        var receiveResult = await clientWebSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
        while (!receiveResult.CloseStatus.HasValue)
        {
            Console.WriteLine("Received message: " + System.Text.Encoding.UTF8.GetString(receiveBuffer, 0, receiveResult.Count));
            receiveResult = await clientWebSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
        }

        // Close connection
        await clientWebSocket.CloseAsync(receiveResult.CloseStatus.Value, receiveResult.CloseStatusDescription, CancellationToken.None);
        Console.WriteLine("Disconnected!");
    }


}

然后用java写个websocket服务端代码如下,发现连接上服务端报错

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.OnError;
import javax.websocket.server.ServerEndpoint;
 
@ServerEndpoint("/testWebSocket")
public class WebSocketServer  {
 
    @OnOpen
    public void onOpen(Session session) {
        System.out.println("Connected ... " + session.getId());
    }
 
    @OnMessage
    public String onMessage(String message, Session session) {
        System.out.println("Received: " + message);
        return "Response: " + message;
    }
 
    @OnClose
    public void onClose(Session session) {
        System.out.println("Disconnected ... " + session.getId());
    }
    
    
}

错误如下,这个异常如何解决
1月 16, 2025 4:28:48 下午 org.apache.tomcat.websocket.pojo.PojoEndpointBase onError
严重: 在错误发生后,没有为[WebSocketServer]配置错误处理
java.io.EOFException

  • 写回答

3条回答 默认 最新

  • 道友老李 JWE233286一种基于机器视觉的水表指针读数识别及修正的方法 专利发明者 2025-01-16 16:51
    关注
    让【道友老李】来帮你解答,本回答参考gpt编写,并整理提供,如果还有疑问可以点击头像关注私信或评论(小黑屋了,无法评论,请私信)。
    如果答案让您满意,请采纳、关注,非常感谢!
    问题分析:根据错误信息,异常是由于在WebSocketServer类中没有配置错误处理导致的EOFException。解决方法是在WebSocketServer类中添加一个@OnError注解的方法用于处理错误。 解决方法:添加一个用于处理错误的方法,并在方法中输出错误信息。
    import javax.websocket.OnError;
    @OnError
    public void onError(Throwable t) {
        t.printStackTrace();
    }
    

    这样就可以捕获并输出异常信息,避免出现未处理的EOFException错误。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月16日