My program is whenever i start my AccelSender program, it sends epnId to my server machine to request host for that particular epnId. When the server returns hostName, it starts two Runnable Thread class called new DataTransmitter(hostName,epnId)
and new JMSConnection()
.
What i am trying to do is whenever my reStart(String hostName)
is invoked i want to stop the new DataTransmitter(hostName,epnId)
thread and start it with setting new hostName.
Here is my code:
public class AccelSender {
private Socket kkSocket = null;
private PrintWriter out = null;
private BufferedReader in = null;
private static final String epnId = "EPN1";
public AccelSender(){
}
public void requestHost(){
try{
Socket hostSocket = new Socket("10.3.2.227",1121);
PrintWriter out = new PrintWriter(hostSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(hostSocket.getInputStream()));
out.println(epnId);
while(true){
String hostName = in.readLine();
DataTransmitter dt = new DataTransmitter(hostName,epnId);
JMSConnection jms = new JMSConnection();
new Thread(dt).start();
new Thread(jms).start();
}
}
catch(Exception e){
e.printStackTrace();
}
}
public void reStart(String hostName){
//Here i want to STOP the DataTransmitter Thread and,
START with new hostName
}
}
Code for Runnable class:
public class DataTransmitter implements Runnable {
private Socket kkSocket = null;
private PrintWriter out = null;
private BufferedReader in = null;
private int port = 2508, fileCount = 0, arrivalRate = 500;
private String hostName = null, data = null, filename = null;
private boolean resetSender = false;
private static String epnId = null;
File folder = new File(System.getProperty("user.dir")+"/input_data");
File[] listOfFiles = folder.listFiles();
public DataTransmitter(){
}
public DataTransmitter(String hostName, String epnId){
this.hostName = hostName;
this.epnId = epnId;
establishHostConnection();
}
public void establishHostConnection(){
try {
kkSocket = new Socket(hostName, port);
out = new PrintWriter(kkSocket.getOutputStream(), true);
in = new BufferedReader(new
InputStreamReader(kkSocket.getInputStream()));
resetSender = true;
} catch (UnknownHostException e) {
System.err.println("Don't know about host: thinklatch.");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to:
thinklatch.");
System.exit(1);
}
}
public void close() throws IOException{
kkSocket.close();
out.close();
in.close();
}
public void run(){
System.out.println("Entering Data Transmitter");
try{
while (fileCount <= 1) {
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
System.out.println("File " +
listOfFiles[i].getName());
filename = System.getProperty("user.dir") +
"/input_data/" + listOfFiles[i].getName();
BufferedReader bf = new BufferedReader(new
FileReader(filename));
System.out.println("Fetching input from : " +
filename);
while((data=bf.readLine())!=null){
String str =
this.hostName+","+this.epnId+","+arrivalRate+","+data;
out.println(str);
try{
TimeUnit.MILLISECONDS.sleep(2);
}catch(Exception e){
}
}
}
}
fileCount++;
}
}catch(FileNotFoundException fnfe){
System.err.println("E"+fnfe);
}catch(IOException ioe){
System.err.println("E"+ioe);
}
out.close();
}
}
Any advice on restarting the thread for this case is appreciable. Thanks in advance ....