Era*_*ray 5 java android websocket socket.io
我正在尝试使用socket.io开发一个应用程序.有2个设备,当有人触摸到设备1的屏幕时,我需要在设备2上看到一条消息.
这是nodeJS服务器代码(我使用的是SocketIO v0.9.*,因为socket.io-java-client不支持版本> 1.0.0)
var app = require('http').createServer()
var io = require('socket.io').listen(1337);
io.on('connection', function (socket) {
socket.on('tiklama', function (data) {
console.log(data);
io.emit('tiklama', data);
});
});
Run Code Online (Sandbox Code Playgroud)
和我的Java代码(点击这里查看整个代码):
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final RelativeLayout anapanel = (RelativeLayout) findViewById(R.id.anapanel);
final TextView tw = (TextView) findViewById(R.id.textView1);
final TextView tw2 = (TextView) findViewById(R.id.textView2);
final TextView tw4 = (TextView) findViewById(R.id.textView4);
try {
socket = new SocketIO("http://SERVERIPADDRESS:1337");
socket.connect(new IOCallback() {
@Override
public void onMessage(JSONObject json, IOAcknowledge ack) {
try {
Log.d("x","Server said:" + json.toString(2));
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onMessage(String data, IOAcknowledge ack) {
Log.d("x","Server said: " + data);
}
@Override
public void onError(SocketIOException socketIOException) {
Log.d("x","an Error occured");
socketIOException.printStackTrace();
}
@Override
public void onDisconnect() {
Log.d("x","Connection terminated.");
}
@Override
public void onConnect() {
Log.d("x","Connection established");
}
@Override
public void on(String event, IOAcknowledge ack, Object... args) {
Log.d("x","Server triggered event '" + event + "'");
if(event.contentEquals("tiklama")) {
tw4.setText("Someone touched to device 1");
}
}
});
// This line is cached until the connection is establisched.
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
anapanel.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if (event.getAction() == MotionEvent.ACTION_DOWN){
socket.emit("tiklama", "someoneclicked");
}
return false;
}
});
}
Run Code Online (Sandbox Code Playgroud)
所以这里我的问题是:两台设备都成功连接到NodeJS服务器,当我触摸设备上的屏幕时,我在服务器控制台上看到"有人点击"消息.但是第二个设备没有收到此消息,并且LogCat上没有任何反应.我怎样才能解决这个问题并用socket.io传达这两个设备?
由于您正在使用 的0.9.*
版本socket.io
,因此您需要使用 来广播消息io.sockets.emit
。该快捷方式io.emit
已在版本中引入1.0
。
改变 :
\n\nio.emit(\'tiklama\', data);\n
Run Code Online (Sandbox Code Playgroud)\n\n到
\n\nio.sockets.emit(\'tiklama\', data);\n
Run Code Online (Sandbox Code Playgroud)\n\n从 0.9文档迁移说:
\n\n\n\n快捷方式 一般来说,常见的事情有一些新的快捷方式。\n旧版本应该仍然有效,但快捷方式很好。
\n\n向默认命名空间中的所有客户端广播
\n\n之前:
\n\nio.sockets.emit(\'事件名称\', \'事件数据\');
\n\n现在:
\n\nio.emit(\'事件名称\', \'事件数据\');
\n\n整洁的。请注意,在这两种情况下,这些消息都会到达连接到默认 \xe2\x80\x98/\xe2\x80\x99\n 命名空间的所有客户端,但不会到达其他命名空间中的客户端。
\n
归档时间: |
|
查看次数: |
748 次 |
最近记录: |