gpt4 book ai didi

java - Gottox socket.io-java-client "Error while handshaking"空指针异常

转载 作者:搜寻专家 更新时间:2023-11-01 01:35:31 25 4
gpt4 key购买 nike

我正在尝试使用 socket.io 连接到由 Geoloqi 托管的流媒体服务器

我直接从 github 上抓取了 Gottox socket.io-java-client 代码,除了更改 url 之外没有做任何修改,但它给了我“握手时出错”的消息。我从 Geoloqi 的制造商那里得到的 url 应该可以工作:https://community.geoloqi.com/discussion/19/data-streaming#Item_11 (见第一个回复)。

这是来自 BasicExample.java 的代码

package basic;
/*
* socket.io-java-client Test.java
*
* Copyright (c) 2012, Enno Boland
* socket.io-java-client is a implementation of the socket.io protocol in Java.
*
* See LICENSE file for more information
*/
import io.socket.IOAcknowledge;
import io.socket.IOCallback;
import io.socket.SocketIO;
import io.socket.SocketIOException;

import org.json.JSONException;
import org.json.JSONObject;

public class BasicExample implements IOCallback {
private SocketIO socket;

/**
* @param args
*/
public static void main(String[] args) {
try {
new BasicExample();
} catch (Exception e) {
e.printStackTrace();
}
}

public BasicExample() throws Exception {
socket = new SocketIO();
// socket.connect("http://localhost:8080/", this);
socket.connect("https://subscribe.geoloqi.com:443", this);

// Sends a string to the server.
socket.send("Hello Server");

// Sends a JSON object to the server.
socket.send(new JSONObject().put("key", "value").put("key2",
"another value"));

// Emits an event to the server.
socket.emit("event", "argument1", "argument2", 13.37);
}

@Override
public void onMessage(JSONObject json, IOAcknowledge ack) {
try {
System.out.println("Server said:" + json.toString(2));
} catch (JSONException e) {
e.printStackTrace();
}
}

@Override
public void onMessage(String data, IOAcknowledge ack) {
System.out.println("Server said: " + data);
}

@Override
public void onError(SocketIOException socketIOException) {
System.out.println("an Error occured");
socketIOException.printStackTrace();
}

@Override
public void onDisconnect() {
System.out.println("Connection terminated.");
}

@Override
public void onConnect() {
System.out.println("Connection established");
}

@Override
public void on(String event, IOAcknowledge ack, Object... args) {
System.out.println("Server triggered event '" + event + "'");
}
}

这是错误信息:

an Error occured
io.socket.SocketIOException: Error while handshaking
at io.socket.IOConnection.handshake(IOConnection.java:322)
at io.socket.IOConnection.access$7(IOConnection.java:292)
at io.socket.IOConnection$ConnectThread.run(IOConnection.java:199)
Caused by: java.lang.NullPointerException
at io.socket.IOConnection.handshake(IOConnection.java:302)
... 2 more
May 1, 2013 10:02:49 PM io.socket.IOConnection cleanup
INFO: Cleanup

代码出了什么问题?

最佳答案

查看 source code异常来自哪里(IOConnection.java:302,来自内部 NullPointerException),有这段代码:

if (connection instanceof HttpsURLConnection) {
((HttpsURLConnection) connection)
.setSSLSocketFactory(sslContext.getSocketFactory());
}

显然 connection 必须是非空的,否则它不会通过 instanceof 测试。因此,sslContext 必须为空。由于该文件中唯一引用 sslContext 的其他位置是在 setSslContext()getSslContext() 中,因此唯一合乎逻辑的结论是 < strong>您必须在建立 SSL 连接之前调用 setSslContext()SocketIO.setDefaultSSLSocketFactory() 还会调用 IOConnection.setSslContext(),因此您也可以调用它。

试试这个:

SocketIO.setDefaultSSLSocketFactory(SSLContext.getDefault());
socket = new SocketIO();
socket.connect("https://subscribe.geoloqi.com:443", this);
...

关于java - Gottox socket.io-java-client "Error while handshaking"空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16329310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com