public class SocketTest {
private ScheduledThreadPoolExecutor mScheduledThreadPoolExecutor = null;
private Runnable mRunnable = null;
private ScheduledFuture<?> mScheduledFuture = null;
private Socket mSocket = null;
private Logger mLogger = Logger.getLogger(SocketTest.class.getName());
private void session() {
DataInputStream dis = null;
DataOutputStream dos = null;
try {
dis = new DataInputStream(mSocket.getInputStream());
dos = new DataOutputStream(mSocket.getOutputStream());
while (true) {
String data = “PC时间:” + System.currentTimeMillis();
dos.writeUTF(data);
dos.flush();
String s = dis.readUTF();
mLogger.info(“收到数据:” + s);
Thread.sleep(5000);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
mSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
mSocket = null;
}
}
public SocketTest() {
mScheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(1);
mRunnable = new Runnable() {
@Override
public void run() {
if (mSocket == null || !mSocket.isConnected()) {
mLogger.info(“尝试建立连接…”);
try {
mSocket = new Socket(“localhost”, 18000);
mLogger.info(“建立新连接:” + mSocket.toString());
CompletableFuture.runAsync(new Runnable() {
@Override
public void run() {
session();
}
});
} catch (Exception e) {
mLogger.info(“连接异常”);
}
} else {
mLogger.info(“连接心跳检测:当前已经建立连接,无需重连”);
}
}
};
// 每隔3秒周期性的执行心跳检测动作。
mScheduledFuture = mScheduledThreadPoolExecutor.scheduleAtFixedRate(mRunnable, 0, 3, TimeUnit.SECONDS);
}
public static void main(String[] args) {
new SocketTest();
}
}
服务器端(Android):
package zhangphil.socket;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class MainActivity extends AppCompatActivity {
private String TAG = “Android端”;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new ServerThread().start();
}
private class ServerThread extends Thread {
@Override
public void run() {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(19000);
while (true) {
Socket socket = serverSocket.accept();
Log.d(TAG, “接受连接”);
new ClientThread(socket).start();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (serverSocket != null) {
try {
serverSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
private class ClientThread extends Thread {
private Socket socket;
public ClientThread(Socket socket) {
this.socket = socket;
Log.d(TAG, “当前Socket:” + socket.toString());
}
@Override
public void run() {
try {
DataInputStream dis = new DataInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
while (true) {
String data = dis.readUTF();
Log.d(TAG, “收到数据:” + data);
//回写给客户端。
String s = “手机时间:” + System.currentTimeMillis();
dos.writeUTF(s);
dos.flush();
}