I have created a TCP server thread which I want to keep running and listening to the IOT device (an RFID reader). I have only one client.
Please review my code and provide your feedback. Are there any edge cases that would make this TCP server fail?
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 TcpServerThread extends Thread {
private static final String TAG = "TcpServerThread";
private boolean run_ = true;
DataInputStream stream;
ServerSocket serverSocket;
Socket clientSocket;
public TcpServerThread() {
super();
start(); //start the thread
}
@Override
public void run() {
byte[] inBytes = new byte[200];
int mPort = 1025;
//creating a socket to listen on a given port
Log.d(TAG, "PORT OPENED SUCESSFULLY in " + mPort);
try {
serverSocket = new ServerSocket(mPort);
} catch (IOException e) {
Log.d(TAG, "run: [exception occured in creating the socket]" + e.getLocalizedMessage());
}
while (run_) {
Log.d(TAG, "run() :started");
try {
while (serverSocket != null) {
Log.d(TAG, "run() : running ");
try {
//accepting the incoming socket connection request
long started = System.currentTimeMillis();
clientSocket = serverSocket.accept();
clientSocket.setKeepAlive(true);
if (clientSocket != null) {
long established = (System.currentTimeMillis() - started);
Log.d(TAG, "[Connection made at]:" + clientSocket.getRemoteSocketAddress() + "in mills :" + established);
DataInputStream stream = new DataInputStream(clientSocket.getInputStream());
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
while ((input = stream.read(inBytes)) != -1) {
Log.d(TAG, "Size read is " + input);
Log.d(TAG, "Data is " + (inBytes));
outToServer.writeByte(10);
}
}
} catch (IOException e) {
Log.d(TAG, "IOexception occured: " + e.getLocalizedMessage());
continue;
} catch (Exception e) {
Log.d(TAG, "EXCEPTION occured: " + e.getLocalizedMessage());
continue;
}
}
} catch (Exception e) {
//we need to watch out for IllegalStateException cases
Log.d(TAG, "[Exception occured] :" + e.getLocalizedMessage());
continue;
}
}
try {
throw new RuntimeException(TAG + " Crashed!!");
} catch (RuntimeException e) {
Log.d(TAG, "RuntimeException: " + e.getLocalizedMessage());
}
}
public void abort() {
run_ = false;
closeServer();
interrupt();
}
public void closeServer() {
try {
serverSocket.close();
clientSocket.close();
stream.close();
} catch (Exception e) {
Log.d(TAG, "closeServer: " + e.getLocalizedMessage());
} finally {
start();
}
}