package com.example.qingyangdemo.net;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.List;
import com.example.qingyangdemo.base.AppException;
import com.example.qingyangdemo.base.BaseApplication;
import com.example.qingyangdemo.bean.Disk;
import com.example.qingyangdemo.bean.PcFile;
/**
* socket访问pc公共类
*
* @author zqy
*
*/
public class SocketClient {
// 连接超时时间
private static final int TIMEOUT_CONNECTION = 2000;
// 重新操作次数
private static final int RETRY_TIME = 3;
/**
* 获取socket
*
* @return
* @throws IOException
* @throws UnknownHostException
* @throws Exception
*/
private static Socket getSocket(BaseApplication application)
throws UnknownHostException, IOException {
Socket socket = new Socket(application.getIpAdress(), URL.PC_PORT);
socket.setKeepAlive(true);
socket.setSoTimeout(TIMEOUT_CONNECTION);
return socket;
}
/**
* socket连接方法
*
* @return
*/
private static String socketConnect(BaseApplication application,
String method) throws AppException {
DataInputStream dis = null;
DataOutputStream dos = null;
Socket socket = null;
String result = "";
int time = 0;
do {
try {
socket = getSocket(application);
dos = new DataOutputStream(socket.getOutputStream());
dos.writeUTF(method);
dis = new DataInputStream(socket.getInputStream());
result = dis.readUTF();
break;
} catch (IOException e) {
time++;
if (time < RETRY_TIME) {
try {
Thread.sleep(1000);
continue;
} catch (InterruptedException e1) {
}
}
e.printStackTrace();
throw AppException.network(e);
} finally {
try {
if (dis != null) {
dis.close();
}
if (dos != null) {
dos.close();
}
if (socket != null) {
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
throw AppException.network(e);
}
}
} while (time < RETRY_TIME);
return result;
}
// 获取盘符信息
public static List<Disk> getDiskInfo(BaseApplication application)
throws AppException {
return Disk.parse(socketConnect(application, URL.GET_DISK));
}
// 获取盘符下的文件信息
public static List<PcFile> getFileInfo(BaseApplication application,
String diskPath) throws AppException {
return PcFile.parse(socketConnect(application, diskPath));
}
// 关闭PC计算机
public static boolean PowerOffPc(BaseApplication application)
throws AppException {
return Boolean.valueOf(socketConnect(application, URL.POWER_PC));
}
// 控制鼠标
public static boolean mouseControl(BaseApplication application, String msg)
throws AppException {
return Boolean.valueOf(socketConnect(application, msg));
}
}