今天说一下io.socket连接 使用,首先导入jar包,在build.gradle文件写入compile(‘io.socket:socket.io-client:0.8.3’)
IO.Options options = new IO.Options();
Socket socket = IO.socket(uri,options);
socket.connect();
uri 是一个ip地址,可以和后台商量,可以以ip+唯一参数的形式,options给一个默认的就行,
Emitter emitter = socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
//连接成功,做一些操作
}
Emitter emitter = socket.on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {
//连接断开,做一些操作
}
//自定义事件,和服务器做交互,传递数据,以json的格式 接收and请求
socket.emit("自定义事件", new JSONObject(), new Ack() {
@Override
public void call(Object... args) {
System.out.println(args + "+++++++++++++++++++++++++++");
Gson gson = new Gson();
if (args.length > 0) {
String jsondata = gson.toJson(args[0]);
System.out.println(jsondata + "-----");
}
}
});
emitter.on("studentInfo", new Emitter.Listener() {
@Override
public void call(Object... args) {
System.out.println("服务器端请求学生信息studentInfo:=========================");
// 返回给服务器端
try {
Ack ack = (Ack) args[args.length - 1];
JSONObject jsonObject = new JSONObject();
jsonObject.put("studentId", "");
jsonObject.put("studentName", "");
ack.call(jsonObject);
} catch (Exception e) {
e.printStackTrace();
}
}
});`
//向服务端提交数据,以json格式
socket.emit("stuQuesAnswer1", json, new Ack() {
@Override
public void call(Object... args) {
//请求失败或成功,做其他操作
...
}
}
//监听服务器自定义事件
socket.on("自定义事件", new Emitter.Listener() {
@Override
public void call(Object... args) {
System.out.println(args);
...
}
注意:当第二次连接的时候,会有可能事件监听不到,会以为连接通道堵塞,socket.open();就好了;当服务端交互需要刷新界面时候,要用handle,或者另起Thread,否则会报错,socket监听里是不能做耗时操作,以及刷新UI的。
当离开界面的时候,要主动断开连接,把监听取消
if (socket != null) {
socket.disconnect();
socket.close();
socket.io().off();
}