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

2024-01-25

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

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

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

这是我得到的错误...

Error

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 地址需要在其末尾添加一个“/”。

JavaScriptws://192.168.0.25:9000

Javaws://192.168.0.25:9000/

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中的简单 Websocket 客户端 - 连接问题 的相关文章

  • 超立方体错误。非法的最小或最大规格

    尝试从这里运行示例代码http tess4j sourceforge net codesample html http tess4j sourceforge net codesample html我收到一条错误消息 Error Illega
  • 具有“繁忙”线程的 threadPoolExecutor 如何被终止?

    我的问题有点复杂 让我尝试彻底解释一下 但如果您需要更多详细信息 请随时询问我 我会添加它们 我最近 通过实验 了解到 如果线程连续工作 例如 while true 循环中的整数运算 则中断线程对其没有影响 话题继续进行 就像什么都没发生一
  • 在 Postgres 中为特定查询设置 work_mem

    我正在使用一个委托给 JDBC 驱动程序的库PostgreSQL 而且有些查询非常复杂 需要更多内存 我不想设置work mem对于所有查询来说都是大的 只是这个子集 问题是执行以下代码会导致错误 pseudo code for what
  • 继续使用 sketch.js 编辑草图图像 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在使用 sketch js 中的示例 http intridea github io sketch js http intridea g
  • 从 java.util.TimeZone 转换为 org.joda.DateTimeZone

    在Java中如何将一个实例转换为java util TimeZone to org joda DateTimeZone并保持夏令时 Joda Time 处于维护模式 The 乔达时间 http www joda org joda time
  • Android Studio 中没有参考文档

    昨天刚刚出现了一个新问题 当我将鼠标悬停在方法上或按 Ctrl Q 时 我通常会获取该特定方法的文档信息 但现在我只是得到 按 Ctrl QSharedPreferences getLong Following external urls
  • 检查 jar 是否从 shell 运行

    我有一个 java jar 程序 我试图在我的机器启动时运行它 理想情况下 shell 脚本将每 60 秒检查一次以确保 jar 正在运行 我如何检查 jar 是否在 centos 上运行 这似乎不起作用 我当前的 sh 文件 bin ba
  • 如何暂停程序直到按下按钮?

    我使用从 jframe 扩展的类 它有一个按钮 我在程序中使用它 我希望当在我的程序中运行 jframe 时我的整个程序暂停 直到我按下按钮 我该怎么做 in c getch 做这个 我想要一个这样的功能 通过睡眠暂停执行 http dow
  • 在 Java 中停止线程? [复制]

    这个问题在这里已经有答案了 我正在编写一段代码 该代码连接到服务器 使用该连接生成一堆线程并执行一堆 东西 在某些情况下 连接会失败 我需要停止一切并从头开始使用新对象 我想在对象之后进行清理 但在线程上调用 thread stop 但此方
  • Hazelcast Jet 变更数据捕获

    我在我的应用程序中使用 Hazelcast 更改数据捕获 CDC 我使用 CDC 的原因是 如果使用 jdbc 或其他替代功能将数据加载到缓存中 会花费大量时间 所以CDC将在数据库和 Hazelcast Jet 之间进行数据同步 Stre
  • 测试正确的时区处理

    我们正在处理大量数据 所有数据均以 UTC Java 语言 标记 在读取这些数据 将其存储在数据库中以及再次将其取出之间 发生了一些数据在夏令时期间关闭一小时的情况 由于 UTC 没有夏令时的概念 这显然是软件中的一个错误 一旦知道 就很容
  • java代码的等效vb代码

    谁能告诉我这段Java代码到底做了什么 SecureRandom random SecureRandom getInstance SHA1PRNG byte bytes new byte 20 synchronized random ran
  • 为什么我用Java计算的结果是错误的?

    我使用这段代码来计算一些东西 但几乎在所有情况下结果都是 0 0 为什么 编译器中没有警告或错误 private void jButton1ActionPerformed java awt event ActionEvent evt try
  • 嵌套异常是java.lang.NoClassDefFoundError:无法初始化类org.springframework.jdbc.support.SQLErrorCodesFactory

    我正在使用 spring 和 jdbctemplate 编写一个应用程序 但是我遇到了以下错误 org springframework web util NestedServletException Handler processing f
  • 为什么我得到:没有有效的 JFX 运行时

    我有一个使用 java 1 6 编译并使用 jnlp webstart 运行的现有应用程序 如果我使用 JRE 1 6 从客户端运行此应用程序 一切都会很好 但是 当我使用 java JDK 7 编译代码并使用 JRE 1 7 67 运行客
  • SQL准备语句如何通过多个可能的菜单选择进行选择?

    所以我有 4 个菜单选择 产品 位置 课程类型和类别 所有这些都可以为空 使用 JSF 编程 但这应该与这个问题无关 因为它是一个 SQL 问题 菜单选择将向托管 bean 发送用户选择的变量 并使用准备好的语句使用用户选择的菜单中的信息
  • 是否可以从外部闪存驱动器运行 java (jdk-windows)、Eclipse (indigo) 和 Android-sdk 进行 Android 应用程序开发

    我想知道我们是否可以通过在外部闪存驱动器上保存所需的软件来在我们使用的任何计算机上开发我们的android应用程序 我的意思是在闪存驱动器上安装java eclipse和android sdk 所以最后我们可以将闪存带到任何地方计算机并在任
  • 找不到 `activityViewModels()` Hilt Android

    我在我的项目中使用 Hilt 和 MVVM 我想要一个viewModel from activityViewModel在 2 个活动中使用相同的内容 但我的 Android Studio 说未解析的参考 我的应用程序 build gradl
  • 如何在 Hibernate 中使用 SELECT 进行 INSERT

    我需要在休眠中实现以下请求 insert into my table max column values select max id from special table where 如何在休眠中使用注释来做到这一点 Special tab
  • 这种说法是否恰当。 if (0 != 表达式或变量) {} 在java中? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐

  • 如何正确重写克隆方法?

    我需要在我的一个没有超类的对象中实现深度克隆 处理检查的最佳方式是什么CloneNotSupportedException由超类抛出 即Object 一位同事建议我按以下方式处理 Override public MyObject clone
  • 通过 Groovy XML 解析器使用字符串作为代码

    我是 groovy 的新手 我希望这是一个简单的问题可以解决 我正在读取 xml 文档 然后我可以访问如下数据 def root new XmlParser parseText xmlString println root foo bar
  • 如何禁用 Google 跟踪代码管理器控制台日志记录

    将 Google 跟踪代码管理器添加到项目后 我在控制台中看到了很多日志条目 有办法禁用它吗 控制台日志充满了噪音 GoogleTagManager info Processing logged event vs with paramete
  • Node.js ENOENT 读取 PDF 文件

    我需要阅读 pdf 文件并使用pdf text extract 它在我的本地主机上完美运行 但是当我尝试在服务器上运行该程序时 出现以下错误 spawn called 0 pdftotext 1 layout enc UTF 8 tmp t
  • Keychain 中存储的字符串有长度限制吗?

    我想在iOS上将一些用户信息作为字符串存储在Keychain中 那么Keychain中的字符串有长度限制吗 Thanks 我组装了一个 iOS 应用程序 可以使用以下命令进行二分搜索这个图书馆 https github com kishik
  • twig - 将函数传递到模板中

    目前 我将函数放在一个类中 并将该类的实例传递到模板中 并将所需的函数作为类方法调用 unneededclass blah 我需要像下面这样做 blah 是否可以 更新 2015 年 5 月 14 日 评论者指出我大部分都是错的 如果您确实
  • 如何合并两个UIImage?

    我正在尝试合并两个不同的图像并创建一个新的图像 这就是我想做的方式 我有这张图片 A 这是一张 PNG 图像 我想将其与我从手机中获取的另一张图像 B 合并 以创建如下所示的图像 我需要一个将 A 与 B 合并创建 C 的函数 尺寸必须保留
  • Nuget Pack 不支持程序集版本上的位数

    I need nuget pack生成只有 3 位数字的包版本 我们想对其进行语义版本控制 但是当我在具有AssemblyVersion属性设置为 1 0 0 生成的 nupkg 文件在其元数据 和文件名 中以版本 1 0 0 0 结尾 为
  • 如何查看tomcat的容器日志?

    如何查看tomcat的容器日志 我从 catalina out 日志中收到此错误 SEVERE localhost startStop 1 org apache catalina core StandardContext startInte
  • 在 SQL Server 中,一行的 %%physloc%% 值总是相同吗?

    我一直在探索它的实际用途 physloc 伪列作为行标识符 不幸的是 我一直无法找到官方文档 physloc 我需要知道这个值是否会改变 我做了一些测试 看起来相当静态 即使我创建数据库的备份并在不同的服务器上恢复 physloc 每行保持
  • Kafka - 无法建立与节点-1的连接

    我正在尝试使用 apache flink 流处理 kafka 主题 但我遇到了这个问题 2018 04 10 02 55 59 856 ProducerConfig values acks 1 batch size 16384 bootst
  • 如何在 React 中重定向到外部链接?

    我正在构建一个画廊 您单击图像 它将使用 props 加载到单独的组件中 该图像是一个 URL 取自数组 其中 src 属性通过 CSS 作为背景图像加载 我的挑战是将 src 数据连接到子组件 查看原始问题 https stackover
  • 如何使用java中的线程读取和写入文件?

    我正在编写一个应用程序 需要从单个文件中读取块 每个块大约为 512 字节 我还需要同时写入块 我的想法之一是BlockReader implements Runnable and BlockWriter implements Runnab
  • C++11线程,在主线程上运行

    我正在尝试 C 11 线程进行一些开发 我想在异步线程中运行一些代码 当该代码完成后 我想在主线程上运行其他代码但只有当它完成时 这是因为我想要运行异步的事情是加载 OpenGL 的东西 并且在执行线程时使用 OpenGL 上下文有点棘手
  • xcodebuild 归档所有目标而不是一个

    我需要从我的档案中归档一个特定的方案xcodeproj 为此 我运行 xcodebuild archive scheme SCHEME target TARGET archivePath ARCHIVE PATH 虽然我明确地定义计划和目标
  • auto 和 __auto_type 有什么区别吗?

    我一直在使用 auto type在 C 语言中已经有一段时间了 我想知道它与auto在C 中 它们的实施方式不同吗 我尝试过搜索这个 但它没有产生任何结果 因为搜索C 中的 auto type返回有关的文章auto在C 中 感觉就像一个被遗
  • 401 Unauthorized -- 在 Doorkeeper 中请求刷新令牌时授权无效

    我在请求刷新令牌时遇到问题 它不断返回未经授权的 401 错误 我不知道我是否缺少我在发出请求时传递的参数 我添加了刷新令牌的门卫配置 use refresh token 这是请求详细信息 root url oauth token refr
  • Elasticsearch 集群 - 没有已知的主节点,正在安排重试

    我有一台运行elasticsearch 和kibana 的服务器 我添加了第二个节点来形成集群 但只希望第二个节点从主节点复制数据 根据有关如何执行此操作的有限文档 我在第二个问题上遇到了以下错误 DEBUG action admin in
  • S3 Select 会加速 Parquet 文件的 Spark 分析吗?

    您可以使用Amazon EMR 上使用 Spark 选择 S3 https docs aws amazon com emr latest ReleaseGuide emr spark s3select html and 与数据块 https
  • Java 中的简单 Websocket 客户端 - 连接问题

    我正在尝试用 Java 编写一个简单的 websocket 客户端来连接到第 3 方 WebSocket 服务器 我无法访问该服务器 我可以在浏览器中使用 javascript 连接并与 websocket 服务器通信 但是当我尝试使用 J