Erfolgreich führen-Buchse.IO-Android-Projekt mit NodeJS
Habe ich es geschafft, ein Socket.IO/Android Projekt zu kompilieren und jetzt bin ich versucht, es zu erhalten, um die Kommunikation mit Socket.IO auf einem NodeJS-server. Ich legte das Projekt auf meiner Drop Box hier:
https://dl.dropboxusercontent.com/u/86164338/socketIOAndroid.zip
Alles kompiliert und läuft, aber ich sehe keine Ausgabe von NodeJS.
Diese basiert auf:
https://github.com/Gottox/socket.io-java-client
Beachten Sie, dass es Anweisungen zur Kompilierung der Java-code und kopieren Sie die jar-Datei in den Ordner libs:
git clone git://github.com/Gottox/- Buchse.io-java-client.git
cd-Buchse.io-java-client
ant jar mv jar/socketio.jar
/Pfad/zu/deinem/libs/Projekt
Jede Hilfe wird sehr geschätzt.
Java-Code:
package com.depictlabs.testsockets03;
import java.net.MalformedURLException;
import java.net.URI;
import org.json.JSONObject;
import io.socket.SocketIO;
import io.socket.IOCallback;
import io.socket.IOAcknowledge;
import io.socket.SocketIOException;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import org.json.JSONException;
import org.json.JSONObject;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SocketIO socket;
try{
System.out.println("Initializing Connection.");
socket = new SocketIO("http://localhost:3000/");
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 + "'");
}
}
);
try {
//This line is cached until the connection is established.
System.out.println("Sending message to server.");
socket.send("user message");
} catch (Exception e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
NodeJS-Code:
var http = require('http')
, io = require('socket.io');
var app = http.createServer();
app.listen(3000);
console.log('Server running at http://127.0.0.1:3000/');
//Socket.IO server
var io = io.listen(app)
, nicknames = {};
io.sockets.on('connection', function (socket) {
socket.on('user message', function (msg) {
console.log('Server running at http://127.0.0.1:3000/');
socket.broadcast.emit('user message', {user: socket.nickname, message: msg.message});
});
socket.on('nickname', function (nick, fn) {
console.log('Server running at http://127.0.0.1:3000/');
nickname = nick.nickname;
if (nicknames[nickname]) {
fn(true);
} else {
fn(false);
nicknames[nickname] = socket.nickname = nickname;
socket.broadcast.emit('announcement', {user: nickname, action: 'connected'});
io.sockets.emit('nicknames', nicknames);
}
});
socket.on('disconnect', function () {
console.log('Server running at http://127.0.0.1:3000/');
if (!socket.nickname) return;
delete nicknames[socket.nickname];
socket.broadcast.emit('announcement', {user: socket.nickname, action: 'disconected'});
socket.broadcast.emit('nicknames', nicknames);
});
});
Sorry, weiß nicht, was du meinst mit "lokalisiert". Ich versuchte es einfach, indem ein download-als auch der code.
By the way, es scheint nicht zu funktionieren auf dem emulator. Ich habe nicht versucht, auf ein Gerät, wie ich nicht über ein handy. Danke!!!
Ich bin auf der Suche in.. Halten 🙂
Ich glaube nicht, dass Ihr node.js server ist richtig geschrieben. Hast du es getestet?
InformationsquelleAutor Victor Diaz | 2013-10-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein problem ist, dass die node.js Server laufen über Localhost, und jedes Gerät oder-emulator laufen auf Virtuellen Maschinen, also, hören Sie nie den localhost des PC. Sie müssen ändern Sie die URL
Für
Ihre Öffentlichen oder statische IP-Adresse von Ihrem Rechner in Ihrem Netzwerk, zum Beispiel:
Besten.
C
InformationsquelleAutor cmarrero01