使用Android客户端监听io套接字事件

时间:2018-08-01 16:42:11

标签: android socket.io

首先请原谅我的英语,因为我的英语不好。我正在寻找一种从带有套接字io的nodeJS服务器检索android发送信息的方法。我的印象是这是版本问题。我的代码编译得很好,我没有设法检索JS对象中包含的信息。 这是服务器代码

 var app = require('express')();
 var http = require('http').Server(app);
 var io = require('socket.io')(http);
  var data ={"msg": "hello  i am the server"};

io.on('connection',function(socket){
console.log('one user connected '+socket.id);
socket.on('message',function(obj){

    console.log(obj.text);
      socket.emit('take', data);
  })
socket.on('disconnect',function(){
    console.log('one user disconnected '+socket.id);
 })

 })

 http.listen(3000,function(){
  console.log('server listening on port 3000');
  })

我正在寻找的信息是“数据”

这是我使用的Java代码,我更愿意将整个代码放在其他地方

    public class MainActivity extends AppCompatActivity {
private Socket socket;
public String ReceiveMsg ="message par defaut ";
{
    try {
        socket = IO.socket("http://192.168.43.168:3000");
        socket.connect();
    } catch (URISyntaxException e) {
    }
}
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    EditText editText = (EditText) findViewById(R.id.editText);
    TextView textView = (TextView) findViewById(R.id.textView);
    Button but = (Button) findViewById(R.id.button);
    socket.connect();
    String msg = takemsg(editText);
    sendMsg(msg);
    socket.on("take", handleIncomingMessages);
    textView.setText(getAz(ReceiveMsg));
    }

   public  String takemsg(EditText editText){
 String msg = "message par defaut ";
msg = editText.getText().toString();
return msg;
}
 public void sendMsg(String msg ){
  JSONObject obj = new JSONObject();
  try{
    obj.put("text", msg);
    socket.emit("message", obj);
}catch (JSONException e){
}
 }

private Emitter.Listener handleIncomingMessages = new Emitter.Listener(){
    @Override
    public void call(final Object... args){
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                JSONObject data = (JSONObject) args[0];
                try {
                    ReceiveMsg = data.getString("msg");
                } catch (JSONException e) {

                }
            }
        });
    }
};
}

2 个答案:

答案 0 :(得分:0)

首先,我认为我们需要更多数据。

服务器的输出是什么?连接是否良好?请检查您的android代码是否正在运行。

如果没有连接,请尝试使用opts设置端口

...
try {
        IO.Options opts = IO.Options();
        opts.port = 3000;
        socket = IO.socket("http://192.168.43.168", opts);
        socket.connect();
    } catch (URISyntaxException e) {
...

检查您的服务是否仍然有效。对于服务而言,存在一些回报,可以使您的服务保持正常运行。

https://developer.android.com/reference/android/app/Service.html#START_STICKY

答案 1 :(得分:0)

我们必须放入清单

     <uses-permission android:name="android.permission.INTERNET" />

允许应用程序使用网络