android转java服务端,Android端与Java服务端交互——SocketIO

最近,由于工作需要,老哥我被分配了研究Android客户端和Java服务端利用SocketIO进行通讯。原先的产品通信是基于js和java的,html5+js作为客户端,服务端用netty-socketio实现的,老大来需求了,说那啥啥啥,咱把这个客户端的通讯部分用Android原生的实现,不要基于js实现,我来了句为啥呀?答:js通讯 不是太稳定(由于我对前端几乎是没有了解,也没有JS相关的经历,所以并不知道这个是否是准确的,有大牛路过请给小白普及一下,谢谢!)。额,好吧,开始啪啪啪敲代码呗。

刚开始,还是有点小激动的,因为,作为刚入职场的小菜鸟,还是处于试用期的,能够被单独分配任务,哦~~想想还是有点小鸡冻的,赢取白富美也不是梦想了。so开始各种google资料,先进入他的官网去了解一下SocketIO到底是个啥子东西。

0818b9ca8b590ca3270a3433284dd417.png

哦,这是个什么鬼,就没有看到我大天朝的文字,作为6级还没有过得文盲简直就是折磨,勉强走过一遍后并没有什么收获。

经过坚持不懈的努力后,终于收获到了你——netty-socketio,这里需要感谢他的作者mrniko。

好了,下面开始进入正题:

先来服务端程序爽一把,话不多说,先上代码:

public class ServerSocketIOForAndroid {

public static void main(String[] args) {

/** * 创建Socket,并设置监听端口 */

Configuration config = new Configuration();

// config.setHostname("192.168.3.225");

//设置主机名

config.setHostname("localhost");

//设置监听端口

config.setPort(9092);

/*config.setUpgradeTimeout(10000000); config.setPingTimeout(10000000); config.setPingInterval(10000000);*/

final SocketIOServer server = new SocketIOServer(config);

/** * 添加连接监听事件,监听是否与客户端连接到服务器 */

server.addConnectListener(new ConnectListener() {

@Override

public void onConnect(SocketIOClient client) {

// 判断是否有客户端连接

if (client != null) {

System.out.println("链接成功。。。");

} else {

System.err.println("并没有人链接上。。。");

}

System.err.println(client.getSessionId().toString());

}

});

/** * 添加监听事件,监听客户端的事件 * 1.第一个参数eventName需要与客户端的事件要一致 * 2.第二个参数eventClase是传输的数据类型 * 3.第三个参数listener是用于接收客户端传的数据,数据类型需要与eventClass一致 */

server.addEventListener("login", String.class, new DataListener() {

@Override

public void onData(SocketIOClient client, String data,

AckRequest ackSender) throws Exception {

// TODO Auto-generated method stub

System.err.println("接收到客户端的信息为:" + data);

//向客户端发送消息

List list = new ArrayList();

list.add("haode");

//第一个参数必须与eventName一致,第二个参数data必须与eventClass一致

client.sendEvent("login", list.toString());

}

});

//启动服务

server.start();

}

}

服务端是基于netty-socketio实现的,需要导入相关的jar包,用maven构建,附上配置文件pom.xml

com.corundumstudio.socketio

netty-socketio

1.7.7

org.slf4j

slf4j-simple

1.7.7

将上述配置参数复制到工程的pom.xml文件中,即可导入所需要的jar包。

服务端到此为止~~~

============================================

Android客户端,老规矩,先上代码爽爽

//创建socket连接

private Socket mSocket;

{

try {

mSocket = IO.socket("http://192.168.3.225:9092/");

} catch (URISyntaxException e) {

throw new RuntimeException(e);

}

}

客户端是基于

上述代码的作用很明显,是创建一个Socket连接,用于客户端和服务器的通讯,IO.socket()里的内容是你服务器端的地址以及监听的端口。

//连接到Server

private void socketConn() {

mSocket.on(Socket.EVENT_CONNECT_ERROR, onConnectError);

mSocket.on(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);

mSocket.connect();

}

这一段代码作用是连接客户端和服务器的,并时刻监听Socket连接是中断。

//取消连接Server

mSocket.disconnect();

mSocket.off(Socket.EVENT_CONNECT_ERROR, onConnectError);

mSocket.off(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);

连接之后,需要在哦你D额story()方法中加入取消Socket连接操作。

上述操作完成后,就可以“随意”的向服务端发送数据和接收服务端返回的数据了。

发送数据也很方便,只要简单的几句就OK了。

//设置数据

mSocket.emit("login", list);

//连接服务

mSocket.on("login", onLogin);

onLogin是一个对象。

private Emitter.Listener onLogin = new Emitter.Listener() {

@Override

public void call(Object... args) {

String s = (String) args[0];

if (!"".equals(s) || s != null) {

Log.e("server data : ", s);

Message msg = new Message();

msg.what = 0;

handler.sendMessage(msg);

}

}

};

在call()方法中可以做一些需要的操作,例如利用handler更新UI等。

最后莫要忘了,在onDestory()方法中off掉on过的连接。

mSocket.off("login", onLogin);

好了,已经黔驴技穷了,就不再继续秀智商了,奉上源码供各位享用:传送门。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值