当前位置: 首页 > 面试题库 >

Java中的简单Websocket客户端-连接问题

史旺
2023-03-14
问题内容

我试图用Java编写一个简单的websocket客户端,以连接到第3方WebSocket服务器(我无法访问该服务器)。

我可以在浏览器中使用javascript连接和与websocket服务器通信,但是当我尝试使用Java客户端执行相同的操作时,它将无法连接。

使用相同的Java客户端,我可以连接到我正在运行的tomcat
Websocket服务器,因此,我认为这是客户端和服务器之间的某种兼容性问题。(我将Tomcat 7.0.56库用于websocket客户端)。

这是我得到的错误…

错误

javax.websocket.DeploymentException: The HTTP request to initiate the WebSocket connection failed
    at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:344)
    at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:166)
    at com.cvr.instant.ws.WebSocketClient.Connect(WebSocketClient.java:44)
    at com.cvr.instant.ws.TestWS.Start(TestWS.java:17)
    at com.cvr.instant.ws.TestWS.main(TestWS.java:37)
Caused by: java.io.EOFException
    at org.apache.tomcat.websocket.WsWebSocketContainer.processResponse(WsWebSocketContainer.java:595)
    at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:317)
... 4 more

WebSocket客户端

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import javax.websocket.ClientEndpoint;
import javax.websocket.CloseReason;
import javax.websocket.ContainerProvider;
import javax.websocket.DeploymentException;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.WebSocketContainer;

@ClientEndpoint
public class WebSocketClient {

    protected   WebSocketContainer container;
    protected   Session userSession = null;

    public WebSocketClient() {
        container = ContainerProvider.getWebSocketContainer();
    }

    public void Connect(String sServer) {

          try {
              userSession = container.connectToServer(this, new URI(sServer));

            } catch (DeploymentException | URISyntaxException | IOException e) {
                e.printStackTrace();
            }

    }

    public void SendMessage(String sMsg) throws IOException {
        userSession.getBasicRemote().sendText(sMsg);
    }

    @OnOpen
    public void onOpen(Session session) {
        System.out.println("Connected");
    }

    @OnClose
    public void onClose(Session session, CloseReason closeReason) {
    }

    @OnMessage
    public void onMessage(Session session, String msg) {
        System.out.println(msg);
    }

    public void Disconnect() throws IOException {
        userSession.close();
    }
}

运行客户端

import java.io.IOException;

public class TestWS {

    public WebSocketClient wsc;
    public TestWS() {
    }

    public void Start() throws InterruptedException, IOException {

        wsc = new WebSocketClient();
        wsc.callback = this;
        wsc.Connect("ws://192.168.0.25:9000");
        Thread.sleep(1000);
        wsc.Disconnect();
    }


    public static void main(String[] args) throws InterruptedException, IOException 
    {
        TestWS t = new TestWS();
        t.Start();
        Thread.sleep(1000);
    }

}

我对websocket客户端非常陌生(一般来说对websocket相当陌生)。您能提供的任何帮助将不胜感激!


问题答案:

我发现了问题-从Java客户端运行时,ws地址的末尾需要一个’/’。

JavaScript ws://192.168.0.25:9000

Java ws://192.168.0.25:9000 /

不知道为什么在Java中需要这样做-但它解决了这个问题…



 类似资料:
  • 我对javax有问题。websocket(使用Eclipse IDE和Jetty 9服务器)。我写了ClientEndDoint(带有所有注释)。这段代码可以与“ws://”配合使用,但我在尝试使用“wss://”时遇到了问题。 我试图做它与SSLContext,但不知道如何我可以添加SSLContextFactory到我的会话或套接字容器。 或者我如何可以使所有连接可信? StackTrace:

  • 问题内容: Google的Chrome和IE等应用程序可以透明地处理Kerberos身份验证;但是我找不到适合这种透明度的“简单” Java解决方案。我发现的所有解决方案都需要存在一个krb5.conf文件和一个login.conf文件,以上应用似乎还需要这些文件。 用有效的Kerberos SSO功能构建Java应用程序的最佳方法是什么? [更新]:明确地说,我需要一个 CLIENT 端解决方案

  • 问题内容: 我正在寻找Java的SOAP客户端。 Apache Axis在我看来非常肿。我不明白为什么Java必须如此复杂。例如,在PHP中,我要做的就是: 我的$ response对象保存了我需要的所有信息。 有人可以建议我如何在Java中实现类似这样的事情而不会太麻烦呢? 提前谢谢了, 〜编辑1〜 @jarnbjo: 这对我非常有用。我遇到的困难是,需要哪些导入才能使代码运行? 我运行了以下命

  • 我正在java应用程序中使用Jetty 9.4.18库编写WebSocket客户端。 我对WebSockets非常陌生,所以我开始使用Jetty文档中的两个示例类进行测试,连接到echo。websocket。组织机构 当我在没有SSL的情况下连接时,测试运行正常,但是如果连接到时失败 我总是遇到同样的异常: 看起来服务器在没有响应握手请求的情况下关闭。 我知道SslContextFactory,但

  • 问题内容: 我有一个简单的问题。我正在尝试将文件上传到Java中的ftp服务器。 我的计算机上有一个文件,我想复制该文件并上传。我尝试将文件的每个字节手动写入输出流,但这不适用于复杂文件,例如zip文件或pdf文件。 只是为了踢球,这是我尝试做的事情: 例如,当我使用pdf进行此操作,然后尝试打开使用该程序运行的pdf时,它表示尝试打开pdf时发生错误。我猜是因为我要在文件中写入“ \ n”?如何

  • 问题内容: 我已经阅读了很多有关该主题的内容,telnet是一种协议,而不是简单的套接字连接,正在等待换行符,使用外部库等等。 最重要的是,我需要启动并运行一个快速且肮脏的Java telnet应用程序,它不一定可扩展且不一定漂亮,因此我试图避免使用库,系统函数调用等。我一直在尝试和测试,到目前为止,当尝试登录路由器(当然是通过telnet)时,我什么都没有。 这是到目前为止我一直在使用的代码的一

  • 我正在制作一个Flask网络应用程序,我正在使用Flask Socketio。出于各种原因,我还需要使用websocket客户端包。一切正常,但当我尝试在不同网络上的不同计算机上运行应用程序时,出现以下错误: 我已经尽可能地将我的代码归结为以下内容,这些代码在我的计算机上仍然有效,但在另一台计算机上给出了相同的错误: 只是一个基本的“Hello World”html页面。 什么样的东西会让我在一台

  • 我已经设置了一个WebSocket服务器使用超文本传输协议-kit,应该接受Web套接字连接。它是超文本传输协议-kit留档中显示的基本示例。 问题是:如何创建连接到它的Clojure客户端? 客户端可以是任何Clojure超文本传输协议库,我真的不介意。我已经了解了Javascript客户端,我相信Java有一个可以从Clojure中使用的API。但是我要找的是一个Clojure库,它支持客户端