How can I use Java to control external programs based on my network latency?

  • Context: Java 
  • Thread starter Thread starter sanitykey
  • Start date Start date
  • Tags Tags
    Control Java Program
Click For Summary
SUMMARY

This discussion focuses on using Java to control external programs based on network latency. The user, Richy, inquires about detecting latency and executing a program conditionally. Job provides a solution utilizing the Java Runtime class to execute the "ping" command and read its output. The provided Java code successfully checks the latency and opens a specified program if the latency is low, demonstrating a practical application of Java for system-level tasks.

PREREQUISITES
  • Basic understanding of Java programming and syntax
  • Familiarity with the Java Runtime class and process execution
  • Knowledge of command-line operations, specifically using "ping"
  • Experience with handling InputStreams in Java
NEXT STEPS
  • Explore Java ProcessBuilder for more advanced process management
  • Learn about Java's ScheduledExecutorService for periodic task execution
  • Investigate network programming in Java for latency measurement
  • Study error handling in Java to improve robustness of the code
USEFUL FOR

Java developers, system administrators, and anyone interested in automating tasks based on network performance metrics.

sanitykey
Messages
93
Reaction score
0
Hi, i would like to make a program which can detect my latency, if it's low then it would open a program and if it's high it'd do nothing, i'd also like to loop it so it tries every half an hour or so. Would this be possible? If so any advice on how to start I'm a bit rusty and have only tried simple programs before (although i suppose this probably is simple :-p ).

Could it use "ping www.google.co.uk" in cmd to get my latency?

Thanks
Richy
 
Technology news on Phys.org
You can't do a ping with Java directly because it can't send ICMP packets, but you can have Java call ping.exe and read the standard output, for example. I've done something similar with c++.
 
Thanks -Job- i managed to make it, my code is a bit messy but here it is if anyone is interested =)

import java.io.IOException;
import java.io.InputStream;

public class PingDownload {

public PingDownload() {}

public static void main(String[] args) {

int ReadCounter = 0;
int NumTotal = 0;
int LoopParameter = 0;

try {

String command = "ping www.google.co.uk";
String command2 = "cmd /c start C:\\ProgramShortcut";

while(LoopParameter != 1) {

Process child = Runtime.getRuntime().exec(command);
//Executes the command string
InputStream in = child.getInputStream();

while (ReadCounter != 169) {

int CharA = in.read();
//Reads the first character and stores its ASCII value
int CharB = in.read();
//Reads the second character and stores its ASCII value
int CharC = in.read();
//Reads the third character and stores its ASCII value

if(47<CharA && CharA<58 && ReadCounter>150) NumTotal = NumTotal + CharA;
if(47<CharB && CharB<58 && ReadCounter>150) NumTotal = NumTotal + CharB;
if(47<CharC && CharC<58 && ReadCounter>150) NumTotal = NumTotal + CharC;

//If any of the characters are numbers and the counter is near the end
//(above 150)
//add them to NumTotal this ensures only the last 3 numbers from the ping
//command are taken which are the maximum minimum and average pings
//detected


ReadCounter++; //Increment the counter

}

//When my ping is high all three numbers consist of three digits and the
//lowest
//value these can take is 0 so i know if the total is below 48x9 = 432 my ping
//is low

if(NumTotal < 432) {

child = Runtime.getRuntime().exec(command2);
LoopParameter = 1; //If the program is opened end the loop
}

}
}

catch (IOException e) {}
}
}

*cough* There might be bits wrong with it other than the way I've went about it but it worked in Netbeans and compiled ok.
 
Last edited:

Similar threads

  • · Replies 3 ·
Replies
3
Views
1K
  • · Replies 7 ·
Replies
7
Views
3K
  • Sticky
  • · Replies 13 ·
Replies
13
Views
8K
  • · Replies 4 ·
Replies
4
Views
6K
  • · Replies 12 ·
Replies
12
Views
2K
  • · Replies 2 ·
Replies
2
Views
6K
  • · Replies 5 ·
Replies
5
Views
5K
Replies
3
Views
3K
  • · Replies 9 ·
Replies
9
Views
8K
  • · Replies 14 ·
Replies
14
Views
4K