here is my problem:
i've been trying to use socket.io-java-client for an android app but i'm ending up with an handshake error (see below).
here is my app source code:
public void runIO(){
try {
SocketIO socket = new SocketIO("http://192.168.1.60:1337");
socket.connect(new IOCallback() {
@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 + "'");
}
});
// This line is cached until the connection is establisched.
socket.send("Hello Server!");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
and my Node.js / Socket.io:
var app = require('http').createServer(handler)
var io = require('socket.io')(app);
var fs = require('fs');
app.listen(1337);
function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
io.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
And i'm getting the following error:
06-09 03:59:53.955: W/System.err(11738): io.socket.SocketIOException: Error while handshaking
06-09 03:59:53.965: W/System.err(11738): at io.socket.IOConnection.handshake(IOConnection.java:322)
06-09 03:59:53.965: W/System.err(11738): at io.socket.IOConnection.access$7(IOConnection.java:292)
06-09 03:59:53.970: W/System.err(11738): at io.socket.IOConnection$ConnectThread.run(IOConnection.java:199)
06-09 03:59:53.970: W/System.err(11738): Caused by: java.io.FileNotFoundException: http://192.168.1.60:1337/socket.io/1/
06-09 03:59:53.975: W/System.err(11738): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:186)
06-09 03:59:53.975: W/System.err(11738): at io.socket.IOConnection.handshake(IOConnection.java:313)
On a browser it works, and the page at http://192.168.1.60:1337/socket.io/1/
is returning the following message (trough a browser):
{"code":0,"message":"Transport unknown"}
i don't know what to do to make it work ... please help :x
Thanks :D
EDIT:
As Larky said, i had to downgrade my version of Socket.io to 0.9.16. It worked like a charm with the following node code:
var io = require('socket.io').listen(80);
io.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
I solved the problem today by reverting to an earlier version of socket.io on the server-side (an earlier version of the socket.io Node module). Perhaps the protocol changed?
To do this:
Delete the socket.io folder in your node_modules folder.
On the console type:
npm install [email protected]
That should do it... it worked for me :)
(obviously this doesn't completely solve the problem but the earlier version of socket.io worked fine for me for my purposes)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With