在Android开发中,基于Socket的通信必须是非阻塞式的,因此需要Reader和Writer异步分离,此外需要监听Socket网络状态、
监听接口
package com.io.sockets;
import java.io.IOException;
import java.net.Socket;
public interface SocketStatusListener
{
public static final int STATUS_OPEN = 0x01<<0;
public static final int STATUS_CLOSE = 0x01<<1;
public static final int STATUS_RESET = 0x01<<2;
public static final int STATUS_PIP_BROKEN = 0x01<<3;
public static final int STATUS_UNKOWN = 0x01<<4;
public void onSocketStatusChanged(Socket socket,int status,IOException e);
}
Handler读写处理控制
package com.io.sockets;
import java.io.IOException;
import java.net.Socket;
public class SocketHandler implements SocketStatusListener {
private Socket socket=null;
private ReaderTask reader;
private WriterTask writer;
public SocketHandler(Socket socket) throws IOException {
this.socket = socket;
this.socket.setTcpNoDelay(true);
reader = new ReaderTask(socket);
writer = new WriterTask(socket);
onSocketStatusChanged(socket, STATUS_OPEN, null);
}
/**
* sendMessage:(这里用一句话描述这个方法的作用).
* TODO(这里描述这个方法适用条件 – 可选).
*/
public void sendMessage(String msg) {
writer.send(msg);
}
public void listen(boolean isListen)
{
reader.startListener(this);
}
public void shutDown() {
if(!socket.isClosed() &&socket.isConnected())
{
try {
writer.finish();
reader.finish();
socket.close();
} catch (IOExcep