2014-07-26 189 views
0

所以我一直在构建一个基本上调用我的服务器并检查页面源代码的程序。唯一的问题是,因为我有一个无限循环,所以它获取服务器的源代码,然后在循环的底部它保存当前页面代码并刷新实际页面代码在一个不同的变量。如果这两个变量匹配(没有任何变化),然后它将继续循环并调用页面并一遍又一遍地获取源代码。这很有效,除了一段时间后服务器认为它是DoS攻击并且不会让我连接。我已经尝试了一种方法,它会是一个超长的循环,但是这似乎是一个混乱的方式。我的问题是,他们无论如何要告诉Java完全停止代码执行一段时间。例如,它会每隔1分钟或2分钟打电话给服务器?停止代码执行Java

package Mailer2; 
import java.util.Date; 
import java.util.Properties; 
import java.util.Scanner; 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.net.URLConnection; 
import java.net.UnknownHostException; 
import java.util.ArrayList; 

import javax.mail.Authenticator; 
import javax.mail.Message.RecipientType; 
import javax.mail.MessagingException; 
import javax.mail.Multipart; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.AddressException; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeBodyPart; 
import javax.mail.internet.MimeMessage; 
import javax.mail.internet.MimeMultipart; 
public class mailer2 { 
    static Scanner console = new Scanner(System.in); 
    public static void main(String[] args) throws AddressException, MessagingException, IOException, InterruptedException{ 
     System.out.println("Admin console"); 
     boolean StartServer = true; 
     String old = ""; 

     while(StartServer == true){ 
      Thread.sleep(10000); 
     // Get Info from Page 
     String From = ""; 
     String To = ""; 
     String Subject = ""; 
     String Body = ""; 
     String Provider = ""; 
     URL GetInfo = new URL("http://smsmessenger.comuf.com/Users.php"); 

     String GetPage = getPageCode(GetInfo); 
     //System.out.println("Got the String:" + GetPage); 
     String CutDown = GetPage.substring(73,GetPage.indexOf("<br")); 
     //System.out.println(CutDown); 
     From = CutDown.substring(0,CutDown.indexOf("TO:")); // From 
     //System.out.println(From); 
     To = CutDown.substring(CutDown.indexOf("TO:") + 3,CutDown.indexOf("SUBJECT") - 1); 
     //System.out.println(To); 
     Subject = CutDown.substring(CutDown.indexOf("SUBJECT:") + 8,CutDown.indexOf("BODY")); 
     //System.out.println(Subject); 
     Body = CutDown.substring(CutDown.indexOf("BODY:") + 5, CutDown.indexOf("Provider")); 
     //System.out.println(Body); 
     Provider = CutDown.substring(CutDown.indexOf("Provider:") + 9); 
     //System.out.println(Provider); 

     // Cell provider check 
     if(Provider.length() == 0){ 
      System.out.println("No Provider Detected!"); 
     } 
     else if(Provider.toLowerCase().equals("sprint")){ 
      To += "@messaging.sprintpcs.com"; 
      //System.out.println("Sprint HERE:" + To); 
     } 
     else if(Provider.toLowerCase().equals("verizon")){ 
      To += "@vtext.com"; 
     } 
     else if(Provider.toLowerCase().equals("att")){ 
      To += "@txt.att.net"; 
     } 
     else if(Provider.toLowerCase().equals("tmobile") || Provider.toLowerCase().equals("t-mobile")){ 
      To += "@tmomail.net"; 
     } 
     else{ 
     System.out.println("Provider NOT FOUND" + Provider); 
     } 
     if(!old.equals(GetPage)){ 
      System.out.println("SENDING EMAIL!!"); 
     SendEmail(From,To,Subject,Body); 
     } 
     System.out.println("Sleeping"); 
     Thread.sleep(100); 
     old = GetPage; 

     } 


    } 

    public static void SendEmail(String From, String To, String Subject, String Body) throws AddressException, MessagingException{ 

     Properties prop = new Properties(); 
     prop.put("mail.smtp.host", "ssrs.reachmail.net"); 
     prop.put("mail.smtp.port", "587"); 
     prop.put("mail.smtp.auth", "true"); 
     prop.put("mail.smtp.starttls.enable", "true"); 


     Session session = Session.getDefaultInstance(prop, new Authenticator() { 

      // Override method to Authenticate to mail server 
      @Override 
      protected PasswordAuthentication getPasswordAuthentication() { 
      return new PasswordAuthentication("MCA28\\admin", "pass"); 
      } 
      }); 

     session.setDebug(true); 

     MimeMessage Msg = new MimeMessage(session); 
     //System.out.println("Please enter the From:"); 
     //String setFrom = console.nextLine(); 
     Msg.setFrom(new InternetAddress(From)); 
     //System.out.println("Please enter which email to send to"); 
     //String setTo = console.nextLine(); 
     Msg.setRecipients(RecipientType.TO, To); 
     //System.out.println("Set the Subject"); 
     //String subject = console.nextLine(); 
     Msg.setSubject(Subject); 
     //System.out.println("Set the message Body"); 
     //String MessageBody = console.nextLine(); 
     // Initiate MimeBodyPart for filling email content 
     MimeBodyPart messagePart = new MimeBodyPart(); 
     messagePart.setText(Body); 
     Multipart multipart = new MimeMultipart(); 
     multipart.addBodyPart(messagePart); 
     Msg.setContent(multipart); 

     // Email Sending process 
     Transport.send(Msg); 

    } 
    public static String getPageCode(URL SQL) throws IOException // Gets URL, returns InputLine 
    { 
     URLConnection openLine = SQL.openConnection(); 
     BufferedReader in = null; 
     String inputLine = null; 
     String line; 
     in = new BufferedReader(new InputStreamReader(openLine.getInputStream())); 

     while((line = in.readLine()) != null) 
     { 
      inputLine += line; 
     } 

     return inputLine; 

    } 


} 
+0

张贴一些代码。 –

+0

使用一个计时器,也许? – user2864740

+0

呃,你的代码已经有'Thread.sleep(10000);'和'Thread.sleep(100);'在里面。你认为这些做什么? –

回答

0

如果没有更改,请将时间加倍直到下一次重新查询。保持一倍,直到达到预设的最大值,例如在民意测验之间一小时。只要您检测到更改,您就可以更频繁地返回查询。