package cn.face.faceDetection.Api;
import android.util.Log;
import cn.face.faceDetection.TemplatedActivity;
import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class SocketProxy extends TemplatedActivity {
private ExecutorService mThreadPool;
public static Socket socket;
// 输入流对象
InputStream is;
InputStreamReader isr;
BufferedReader br;
OutputStream os;
private int intPort;//端口号
/**
* 初始化
*/
public void initView(){
mThreadPool = Executors.newCachedThreadPool();
}
/**
* 建立socket连接请求
*/
public void connSocket(){
mThreadPool.execute(new Runnable() {
@Override
public void run() {
//socket = new Socket(ApiUrl.URL_SERVER_SOCKET, ApiUrl.PORT_SERVER_SOCKET);
/* int num = 0;
while (socket == null){
num ++;
makeToast("Socket服务重连中...已重连第" + "num" + "次");
socket = new Socket(ApiUrl.URL_SERVER_SOCKET, ApiUrl.PORT_SERVER_SOCKET);
}*/
resetSocket();
System.out.print("请求连接" + socket.isConnected());
runOnUiThread(new Runnable() {
@Override
public void run() {
if(socket.isConnected()){
Log.d("建立连接:","成功!");
}else {
Log.d("建立连接:","失败!");
}
}
});
}
});
}
/**
* 获取数据
*/
private void getDataScoket(){
new Thread(new Runnable() {
@Override
public void run() {
try{
is = socket.getInputStream();
DataInputStream input = new DataInputStream(is);
byte[] b = new byte[1024];
int len = 0;
String response = "";
while (true) {
len = input.read(b);
response = new String(b, 0, len);
Log.e("datadadata", response);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
/**
*断开socket连接
*/
private void dissConnection() {
try {
// 断开 客户端发送到服务器 的连接,即关闭输出流对象OutputStream
os.close();
// 断开 服务器发送到客户端 的连接,即关闭输入流读取器对象BufferedReader
br.close();
// 最终关闭整个Socket连接
socket.close();
// 判断客户端和服务器是否已经断开连接
System.out.println(socket.isConnected());
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 发送数据给服务端
*/
public void sendMessageToServer(String jsonBean) {
long l = System.currentTimeMillis();
final String jsonObject = jsonBean;
try {
resetSocket();
Log.d("信息内容:",jsonObject);
os = socket.getOutputStream();
} catch (Exception e) {
e.printStackTrace();
}
new Thread(new Runnable() {
@Override
public void run() {
try {
os = socket.getOutputStream();
os.write((jsonObject + "/n").getBytes("utf-8"));
// 数据的结尾加上换行符才可让服务器端的readline()停止阻塞
os.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
/**
* 断开重连
*/
public static void resetSocket(){
while(isServerClose(socket)){
try {
socket = new Socket(ApiUrl.URL_SERVER_SOCKET, ApiUrl.PORT_SERVER_SOCKET);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
} catch (IOException e) {
System.out.println("正在重连....");
// TODO Auto-generated catch block
//e.printStackTrace();
}
}
}
/**
* 判断是否断开连接,断开返回true,没有返回false
* @param socket
* @return
*/
public static Boolean isServerClose(Socket socket){
try{
socket.sendUrgentData(0);//发送1个字节的紧急数据,默认情况下,服务器端没有开启紧急数据处理,不影响正常通信
return false;
}catch(Exception se){
return true;
}
}
}
通信测试:https://pan.baidu.com/s/1zq0keV6FREGL6T90uwbqGg 提取码:pl9j