说点题外话:for(int i=1; i<254; i++)
 {
    try{
     Socket s = new Socket("192.168.0."+i , 4455);
     vector.add("192.168.0."+i);
    }
   catch(IOException e){
     //如果建立连接不成功,就会抛出异常,自然就不会添家到vector中.
   }
  }小编程方法问题:是把for循环放在try里好呢,还是把try放在for里比较好呢?
频繁地调用try也会带来资源损耗,似乎。哪为高手有好说法,请指点一二啊。。

解决方案 »

  1.   

    他是说使用多程,而且Socket使用非阻塞的方式打开
      

  2.   

    把for 放在 try里面, 一旦出现异常,循环就结束了, 达不到目的啊.
      

  3.   

    IEQQ(从小事做起) (
    把for 放在 try里面, 一旦出现异常,循环就结束了, 达不到目的啊.
    -------------------------------------------------------------
    收到。
    我想说的是其他(for try)的时候,用哪种方式最好,不是针对您的程序。
      

  4.   

    把socket做成类,
    开60个线程
    起始到结束端口当做参数传给SOCKET类连接ING...这样做大概几秒钟有了..
      

  5.   

    这里有一个简单的程序可以实现对端口的扫描,还需要什么功能的话,可以直接添加。直接编译运行可看效果!
    Scanner.javaimport java.net.*;
    import java.io.*;public class Scanner implements Runnable
    {
     private InetAddress IPAddress;
     private int Port;
     private Thread allportThread; public Scanner(String IPAddress, int port)
     {
      try
      {
       this.IPAddress = this.IPAddress.getByName(IPAddress);
       this.Port = port;
      }
      catch(Exception e)
      {
       System.out.println("The host does not exist.");
      }
     } public void run()
     {  try
      {
       Socket TestPort = new Socket(this.IPAddress, this.Port); //if this port cannot been connected, throw a exception.
       System.out.println(this.Port + ": exist"); //if connected, print out.
      }
      catch(Exception e){
     // System.out.println("The host port is not open!");
         e.printStackTrace();
       }
     }
    //String[] args &Icirc;&ordf;&Ecirc;&auml;&Egrave;&euml;&micro;&Auml;&sup2;&Icirc;&Ecirc;&yacute;
     public static void main(String[] args)
     {
      String str;
      str =  "TPoI Scanner 1.0 - Network Host Scanner\n";
      str += "Author: T.T (TPoI:http://www.tpoi.net)\n\n";
      str += "Usage: Scanner <options> <Hostname>\n\n";
      str += "<options> List:\n";
      str += "   -allport : scan the status of all the ports of the specified host\n";
      str += "   -port %0 : scan the status of the specified ports(%0) of the specified host\n\n";
      str += "Examples:\n";
      str += "   Scanner -allport http://www.microsoft.com/n";
      str += "   Scanner -port 80 21.64.34.191";  if(args.length==0)
      {
       System.out.println(str);
      }
      else
      {
    System.out.println("Length:"+args.length);
       args[0] = args[0].toUpperCase().trim();
    System.out.println("args[0]:"+args[0]);
       char switchArgs = args[0].charAt(1);
       switch(switchArgs)
       {
        case 'A':
        {
         for(int i=1;i<=65535;i++)
         {
    System.out.println("args[1]:"+args[1]);  // args[1] &Icirc;&ordf;&Ouml;÷&raquo;ú&micro;&Oslash;&Ouml;·
          Scanner mainScanner = new Scanner(args[1],i);
    System.out.println("number:"+mainScanner.allportThread.activeCount());
          if(mainScanner.allportThread.activeCount()>100)
           mainScanner.run();
          else
          {
           mainScanner.allportThread = new Thread(mainScanner);
           mainScanner.allportThread.start();
          }
         }
         break;
        }
        case 'P':
        { 
    System.out.println("args[2]:"+args[2]+"---Parameter2:"+java.lang.Integer.parseInt(args[1],10));
         Scanner mainScanner = new Scanner(args[2],java.lang.Integer.parseInt(args[1],10));//args[1] &Ograve;&Ocirc;10&frac12;&oslash;&Ouml;&AElig;&Iuml;&Ocirc;&Ecirc;&frac34;
         try
         {
          mainScanner.run();
         }
         catch(Exception e)
         {
          System.out.println("parameter error");
         }
         break;
        }
        default:
         System.out.println(str);
       }
      }
     }
    }
      

  6.   

    Socket使用非阻塞的方式打开
    是怎么实现,小弟愚钝,还请多多指教
      

  7.   

    Socket使用非阻塞的方式打开
    --------------------------应该就是用线程啦
    不过前面那发广播的方法倒很不错。
      

  8.   

    socket 都会阻塞线程的
    使用syn扫描应该很快 ,但java里不知道有没有直接的ip包的api设置和调用。