Moin zusammen,
Ich habe so ein kleines Probelem mit Threads
Ich möchte 20 Ip Adressen auf Ihre erreichbarkeit überwachen. Die 20 Ip-Adressen lade ich mir über eine Propertie
Das Pingen der Ip-Adressen funktioniert auch so weit.
Nur die Ip-Adressen sollen in unterschiedlichen Intervallen angepingt werden.
Dieses wollte ich über Threads lösen und den Thread solang schlafen legen, wie die Intervall zeit beträgt. Mit einer IpAdress und einem Thread (sleeper) Funktioniert das auch wunderbar. Aber wenn ich dann zwei Ip-Addressen nehme nimmt mein Applet-Java Programm nur den ersten Sleeper und beachten den zweiten gar nicht.
Hab ihr eine Idee wo das Problem liegen könnte oder ich das lösen kann?
Ich habe so ein kleines Probelem mit Threads
Ich möchte 20 Ip Adressen auf Ihre erreichbarkeit überwachen. Die 20 Ip-Adressen lade ich mir über eine Propertie
Das Pingen der Ip-Adressen funktioniert auch so weit.
Nur die Ip-Adressen sollen in unterschiedlichen Intervallen angepingt werden.
Dieses wollte ich über Threads lösen und den Thread solang schlafen legen, wie die Intervall zeit beträgt. Mit einer IpAdress und einem Thread (sleeper) Funktioniert das auch wunderbar. Aber wenn ich dann zwei Ip-Addressen nehme nimmt mein Applet-Java Programm nur den ersten Sleeper und beachten den zweiten gar nicht.
Hab ihr eine Idee wo das Problem liegen könnte oder ich das lösen kann?
Code:
iimport java.applet.*;
import java.awt.*;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Date;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class Threads1 extends Applet implements Runnable {
int width, height;
int i = 2;
Thread t = null;
boolean threadSuspended;
// Executed when the applet is first created.
public void init() {
System.out.println("init(): begin");
width = getSize().width;
height = getSize().height;
System.out.println("init(): end");
}
// Executed when the applet is destroyed.
public void destroy() {
System.out.println("destroy()");
}
// Executed after the applet is created; and also whenever
// the browser returns to the page containing the applet.
public void start() {
System.out.println("start(): begin");
if ( t == null ) {
System.out.println("start(): creating thread");
t = new Thread( this );
System.out.println("start(): starting thread");
threadSuspended = false;
t.start();
}
else {
if ( threadSuspended ) {
threadSuspended = false;
System.out.println("start(): notifying thread");
synchronized( this ) {
notify();
}
}
}
System.out.println("start(): end");
}
// Executed whenever the browser leaves the page containing the applet.
public void stop() {
System.out.println("stop(): begin");
threadSuspended = true;
}
// Executed within the thread that this applet created.
public void run() {
System.out.println("run(): begin");
try {
while (true) {
System.out.println("run(): awake");
myThread(1);
repaint();
myThread(2);
repaint();
myThread(3);
repaint();
myThread(4);
repaint();
myThread(5);
repaint();
myThread(6);
repaint();
myThread(7);
repaint();
myThread(8);
repaint();
myThread(9);
repaint();
myThread(10);
repaint();
myThread(11);
repaint();
myThread(12);
repaint();
myThread(13);
repaint();
myThread(14);
repaint();
myThread(15);
repaint();
myThread(16);
repaint();
myThread(17);
repaint();
myThread(18);
repaint();
myThread(19);
repaint();
myThread(20);
repaint();
}
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("run(): end");
}
// Executed whenever the applet is asked to redraw itself.
public void paint( Graphics gr) {
setSize(800, 900);
for (int counter= 1; counter<= 20; counter++){
gr.setColor(Color.orange);
Properties properties = new Properties();
try {
properties.load( new FileInputStream( "./Conf.properties" ) );
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String ipAddress = properties.getProperty("ipAddress"+counter);
String maxstr = properties.getProperty("max"+counter);
Long maxLong = Long.valueOf(maxstr);
Integer maxInt = Integer.valueOf(maxstr);
String tmStr = properties.getProperty("tm"+counter);
Long tm = Long.valueOf(tmStr);
Integer tmInt = Integer.valueOf(tmStr);
int pos1=10;
int pos2= 0;
int pos3= 300;
try {
if (tm<=maxLong){
Integer wert;
wert= (100/maxInt)*tmInt;
if ((counter%2)==0){
int x = counter-1;
gr.setColor(Color.black);
pos2= (10*x)+(10*x)+(10*(x-2));
gr.drawRect(pos3, pos2, 100, 50);
gr.fillRect(pos3, pos2, wert, 50);
gr.drawString("IP-Address: "+ipAddress, 420, pos2);
gr.drawString("Ping Zeit: "+tmStr, 420, (pos2+10));
}else{
gr.setColor(Color.black);
pos2= (10*counter)+(10*counter)+(10*(counter-2));
gr.drawRect(pos1, pos2, 100, 50);
gr.fillRect(pos1, pos2, wert, 50);
gr.drawString("IP-Address: "+ipAddress, 120, pos2);
gr.drawString("Ping Zeit: "+tmStr, 120, (pos2+10));
}
}
else{
if((counter%2)==0){
int x = counter-1;
gr.setColor(Color.red);
pos2= (10*x)+(10*x)+(10*(x-2));
gr.drawRect(pos3, pos2, 100, 50);
gr.fillRect(pos3, pos2, 100, 50);
gr.drawString("IP-Address: "+ipAddress, 420, pos2);
gr.drawString("Ping Zeit: "+tmStr, 420, (pos2+10));
}else{
gr.setColor(Color.red);
pos2= (10*counter)+(10*counter)+(10*(counter-2));
gr.drawRect(pos1, pos2, 100, 50);
gr.fillRect(pos1, pos2, 100, 50);
gr.drawString("IP-Address: "+ipAddress, 120, pos2);
gr.drawString("Ping Zeit: "+tmStr, 120, (pos2+10));
}
}
}
catch (Exception e) {
System.err.println(e.toString());
}
}
}
public void myThread(int conf) throws IOException{
final Properties properties = new Properties();
properties.load( new FileInputStream( "./Conf.properties" ) );
String ipAddress = properties.getProperty("ipAddress"+conf);
InetAddress host = InetAddress.getByName(ipAddress);
System.out.println("IP: "+host.getHostAddress());
int port = 80;
long tm = System.nanoTime();
Socket so = new Socket(host, port);
so.close();
tm = (System.nanoTime() - tm) / 1000000L;
String maxstr = properties.getProperty("max"+conf);
Long maxLong = Long.valueOf(maxstr);
String tmStrZeit = String.valueOf(tm);
FileWriter writer = new FileWriter("./Conf.properties");
String tmKey = "tm"+conf;
if (tm <= maxLong){
properties.setProperty(tmKey, tmStrZeit);
properties.store(writer, "test");
System.out.println(tmStrZeit);
System.out.println(maxLong);
}else{
properties.setProperty(tmKey, tmStrZeit);
properties.store(writer, "test");
System.out.println(tmStrZeit);
System.out.println(maxLong);
String counter = properties.getProperty("counter"+conf);
Integer counterInt = Integer.valueOf(counter);
if (counterInt== 3){
String username = "pingalarm@intelicom.de";
String password = "v5dke3nx";
String senderAddress ="Noc@one-4-one.de";//someone@web.de
String recipientsAddress = ""; //somereceiver@web.de
String subject = "Warning, die Ping Zeit wurde überschritten";
String text = "Die Ping Zeit vom Server"+ ipAddress+ "wurder überschritten.";
String smtpHost = "smtp.web.de";
new MyThread(conf).sendMail(smtpHost, username, password, senderAddress, recipientsAddress, subject, text);
counterInt = 0;
String counterString = String.valueOf(counterInt);
properties.setProperty("counter", counterString);
}else if (counterInt>3) {
String username = "pingalarm@intelicom.de";
String password = "v5dke3nx";
String senderAddress ="Noc@one-4-one.de";//someone@web.de
String recipientsAddress = ""; //somereceiver@web.de
String subject = "Achtung, die Ping Zeit wurde überschritten";
String text = "Die Ping Zeit vom Server"+ ipAddress+ "ist immer noch überschritten. Es ist schon der"+ counterInt + "versuch";
String smtpHost = "smtp.web.de";
new MyThread(conf).sendMail(smtpHost, username, password, senderAddress, recipientsAddress, subject, text);
counterInt = 0;
String counterString = String.valueOf(counterInt);
properties.setProperty("counter", counterString);
}
else{
counterInt++;
String counterKey = "counter"+conf;
String counterString = String.valueOf(counterInt);
properties.setProperty(counterKey, counterString);
}
}
String intervall = properties.getProperty("intervall"+conf);
long temp_long = Long.parseLong(intervall);
try {
Thread.currentThread().sleep(temp_long);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void sendMail(String smtpHost,String username,String password,String senderAddress,String recipientsAddress,String subject,String text ){
MailAuthenticator auth = new MailAuthenticator(username, password);
Properties properties = new Properties();
// Den Properties wird die ServerAdresse hinzugefügt
properties.put("mail.smtp.host", smtpHost);
// !!Wichtig!! Falls der SMTP-Server eine Authentifizierung
// verlangt
// muss an dieser Stelle die Property auf "true" gesetzt
// werden
properties.put("mail.smtp.auth", "true");
// Hier wird mit den Properties und dem implements Contructor
// erzeugten
// MailAuthenticator eine Session erzeugt
Session session = Session.getDefaultInstance(properties, auth);
try {
// Eine neue Message erzeugen
Message msg = new MimeMessage(session);
// Hier werden die Absender- und Empfängeradressen gesetzt
msg.setFrom(new InternetAddress(senderAddress));
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(
recipientsAddress, false));
// Der Betreff und Body der Message werden gesetzt
msg.setSubject(subject);
msg.setText(text);
// Hier lassen sich HEADER-Informationen hinzufügen
msg.setHeader("Test", "Test");
msg.setSentDate(new Date( ));
// Zum Schluss wird die Mail natürlich noch verschickt
Transport.send(msg);
}
catch (Exception e) {
e.printStackTrace( );
}
}
class MailAuthenticator extends Authenticator {
/**
* Ein String, der den Usernamen nach der Erzeugung eines
* Objektes<br>
* dieser Klasse enthalten wird.
*/
private final String user;
/**
* Ein String, der das Passwort nach der Erzeugung eines
* Objektes<br>
* dieser Klasse enthalten wird.
*/
private final String password;
/**
* Der Konstruktor erzeugt ein MailAuthenticator Objekt<br>
* aus den beiden Parametern user und passwort.
*
* @param user
* String, der Username fuer den Mailaccount.
* @param password
* String, das Passwort fuer den Mailaccount.
*/
public MailAuthenticator(String user, String password) {
this.user = user;
this.password = password;
}
/**
* Diese Methode gibt ein neues PasswortAuthentication
* Objekt zurueck.
*
* @see javax.mail.Authenticator#getPasswordAuthentication()
*/
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(this.user, this.password);
}
}
}
Zuletzt bearbeitet: