直接开始进入正题:
- 先来服务端程序爽一把,话不多说,先上代码:
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<String>() {
@Override
public void onData(SocketIOClient client, String data,
AckRequest ackSender) throws Exception {
// TODO Auto-generated method stub
System.err.println("接收到客户端的信息为:" + data);
//向客户端发送消息
List<String> list = new ArrayList<String>();
list.add("haode");
//第一个参数必须与eventName一致,第二个参数data必须与eventClass一致
client.sendEvent("login", list.toString());
}
});
//启动服务
server.start();
}
}
服务端是基于netty-socketio实现的,需要导入相关的jar包,用maven构建,附上配置文件pom.xml
<dependencies>
<dependency>
<groupId>com.corundumstudio.socketio</groupId>
<artifactId>netty-socketio</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.7</version>
</dependency>
</dependencies>
将上述配置参数到工程的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-client-java实现的,具体使用方式其文档中有详细介绍。
上述代码的作用很明显,是创建一个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);