Created
August 30, 2019 13:14
-
-
Save aslamanver/10ec1c3dffa5cf99fb82f1675db2b8c8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package app; | |
import java.io.BufferedReader; | |
import java.io.DataInputStream; | |
import java.io.DataOutputStream; | |
import java.io.EOFException; | |
import java.io.IOException; | |
import java.io.InputStreamReader; | |
import java.net.Socket; | |
public class SocketClient { | |
private int serverPort = 46568; | |
private String serverHost = "127.0.0.1"; | |
private Socket socket; | |
private DataOutputStream out; | |
private DataInputStream in; | |
private SocketClientRunnable socketClientRunnable; | |
private Thread socketClientThread; | |
private SocketClientListener socketClientListener; | |
public SocketClient(SocketClientListener socketClientListener) { | |
this.socketClientListener = socketClientListener; | |
socketClientRunnable = new SocketClientRunnable(); | |
} | |
public void start() { | |
if (socketClientThread != null && socketClientThread.isAlive()) { | |
socketClientThread.interrupt(); | |
} | |
socketClientThread = new Thread(socketClientRunnable); | |
socketClientThread.start(); | |
} | |
public void sendData(String data) { | |
socketClientRunnable.sendData(data); | |
} | |
class SocketClientRunnable implements Runnable { | |
@Override | |
public void run() { | |
try { | |
String cmd = "adb forward tcp:" + serverPort + " tcp:" + serverPort; | |
Runtime run = Runtime.getRuntime(); | |
Process pr = run.exec(cmd); | |
pr.waitFor(); | |
BufferedReader buf = new BufferedReader(new InputStreamReader(pr.getInputStream())); | |
String line = ""; | |
while ((line = buf.readLine()) != null) { | |
System.out.println(line); | |
} | |
socket = new Socket(serverHost, serverPort); | |
socketClientListener.onConnected("Just connected to " + socket.getRemoteSocketAddress()); | |
out = new DataOutputStream(socket.getOutputStream()); | |
out.writeUTF("Hello from " + socket.getLocalSocketAddress()); | |
while (true) { | |
in = new DataInputStream(socket.getInputStream()); | |
socketClientListener.onDataReceived(in.readUTF()); | |
} | |
} catch (EOFException ex) { | |
socketClientListener.onDisconnected(ex); | |
} catch (Exception ex) { | |
if (ex.getMessage().contains("Cannot run program")) { | |
socketClientListener.onFailed(new NoADBException(ex.getMessage())); | |
} else { | |
socketClientListener.onFailed(ex); | |
} | |
} finally { | |
socketClientThread.interrupt(); | |
} | |
} | |
public void sendData(final String data) { | |
new Thread(new Runnable() { | |
@Override | |
public void run() { | |
try { | |
out.writeUTF(data); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
} | |
}).start(); | |
} | |
} | |
public interface SocketClientListener { | |
void onConnected(String message); | |
void onDisconnected(EOFException exception); | |
void onFailed(Exception exception); | |
void onDataReceived(String data); | |
} | |
public class NoADBException extends Exception { | |
public NoADBException(String msg) { | |
super(msg); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment