一、添加依赖
compile ‘com.koushikdutta.async:androidasync:2.+’
二、应用
public class TCPHandle {
public static long flowNumber=0;
public static boolean isOnWebCall=false;
public static final int PORT = "端口号";
public static final String HOST = "ip地址";
public static AsyncSocket _asysocket;
public static String TOken="";
public static String Uid="";
/**
* 判断某个界面是否在前台
* @param context Context
* @param className 界面的类名
* @return 是否在前台显示
*/
public static boolean isForeground(Context context, String className) {
if (context == null || TextUtils.isEmpty(className))
return false;
ActivityManager am = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(1);
for (ActivityManager.RunningTaskInfo taskInfo : list) {
if (taskInfo.topActivity.getShortClassName().contains(className)) { // 说明它已经启动了
return true;
}
}
return false;
}
private static void handleConnectCompleted(Exception ex, final AsyncSocket socket) {
isConnecting=false;
if (ex != null) {
System.out.println(ex);
return;
}
_asysocket = socket;
socket.setDataCallback(new DataCallback() {
@Override
public void onDataAvailable(DataEmitter emitter, ByteBufferList bb) {
byte[] _data = bb.getAllByteArray();
System.out.println("Recdata:"+Protrol.getInstance().bytesToHexString(_data));
//需要验证数据有效转义还原之类
if(Protrol.getInstance().isValid(_data)){ //检验有效性
byte[]data = Protrol.getInstance().getCheckData(_data);
switch(data[1]){
case (byte) 0x81: //登录
if(data[2]==0x01){
RxBus.get().post(BusAction.LogIn_Home,data); //登录成功
}
break;
default:
break;
}
}
}
});
socket.setClosedCallback(new CompletedCallback() {
@Override
public void onCompleted(Exception ex) {
_asysocket = null;
Uid="";
TOken="";
if (ex != null) {
System.out.println(ex);
}
System.out.println("[Client] Successfully closed connection");
}
});
socket.setEndCallback(new CompletedCallback() {
@Override
public void onCompleted(Exception ex) {
_asysocket = null;
Uid="";
TOken="";
if (ex != null) {
System.out.println(ex);
}
System.out.println("[Client] Successfully end connection");
}
});
}
public static boolean writedString(String datastring) {
if (_asysocket != null) {
byte[] send = datastring.getBytes();
ByteBufferList data = new ByteBufferList(send);
try{
_asysocket.write(data);
}catch (Exception e){
e.printStackTrace();
}
return true;
}
return false;
}
public static boolean writedData(byte[] send) {
if (_asysocket != null) {
ByteBufferList data = new ByteBufferList(send);
try{
_asysocket.write(data);
}catch (Exception e){
e.printStackTrace();
}
System.out.println("发送数据到服务器:");
System.out.println(Protrol.getInstance().bytesToHexString(send));
return true;
}
return false;
}
public static boolean isConnecting=false;
public static synchronized boolean Connect() {
isConnecting=true;
if (AsyncServer.getDefault().isRunning()) {
RxBus.get().post(BusAction.Main_Toeast, "已经创建过链接了");
isConnecting=false;
return true;
}
try {
AsyncServer.getDefault().connectSocket(new InetSocketAddress(HOST, PORT), new ConnectCallback() {
@Override
public void onConnectCompleted(Exception ex, final AsyncSocket socket) {
isConnecting=false;
handleConnectCompleted(ex, socket);
}
});
} catch (Error error) {
isConnecting=false;
}
return false;
}
public static void Stop() {
AsyncServer.getDefault().stop();
}
}