[英]Gottox socket.io-java-client “Error while handshaking Caused by: java.io.FileNotFoundException: http://192.168.1.69:8080/socket.io/1/
[英]Gottox socket.io-java-client “Error while handshaking” null pointer exception
我正在嘗試使用socket.io連接到Geoloqi托管的流媒體服務器
我直接從github抓取了Gottox socket.io-java-client代碼並且沒有做任何修改,除了更改網址,但它給了我“握手時出錯”的消息。 網址應該是我從Geoloqi的制造商那里得到的: 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
代碼出了什么問題?
查看異常來源的源代碼 ( IOConnection.java:302
,來自內部NullPointerException
),有以下代碼塊:
if (connection instanceof HttpsURLConnection) {
((HttpsURLConnection) connection)
.setSSLSocketFactory(sslContext.getSocketFactory());
}
顯然connection
必須是非null,否則它不會通過instanceof
測試。 因此, sslContext
必須為null。 由於該文件中sslContext
引用sslContext
其他位置在setSslContext()
和getSslContext()
,唯一合乎邏輯的結論是您必須在建立SSL連接之前調用setSslContext()
。 SocketIO.setDefaultSSLSocketFactory()
也調用IOConnection.setSslContext()
,所以你也可以調用它。
嘗試這個:
SocketIO.setDefaultSSLSocketFactory(SSLContext.getDefault());
socket = new SocketIO();
socket.connect("https://subscribe.geoloqi.com:443", this);
...
當我使用https://github.com/Gottox/socket.io-java-client創建我的Java客戶端時,我得到了同樣的錯誤。 好像我的服務器基於1.X,這只支持1.0( https://github.com/Gottox/socket.io-java-client/issues/101 )。 通過使用https://github.com/socketio/socket.io-client-java解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.