|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
再举这样一个例子:如果你想对一个数字取绝对值,你会怎么做呢?java的做法是intc=Math.abs(-166);而ruby的做法是:c=-166.abs。呵呵,这就看出了java与ruby的区别。程序|多线程扫描500个IP10秒钟摆布,一个IP守候0.3秒
说来内疚,我以为是用java写的历程编程,少贴一点仅供参考:
packagesteeven;
importjava.sql.*;
importjava.io.*;
importjava.util.*;
importjava.text.*;
importjavax.servlet.http.*;
publicclassIpextendsCommonimplementsRunnable{
publicStringip;//IP,用户名,主机名
ResultSetlist;//分页显现的纪录集
publicIpcur;//分页显现确当前纪录
staticpublicHashtableping=newHashtable();//ping后的了局集
staticintthreadCount=0;//以后线程的数目,避免过量线程摧毁电脑
publicIp(){}
publicIp(Stringip){
this.ip=ip;
Threadr=newThread(this);
r.start();
}
publicstaticvoidPing(Stringip)throwsException{
//最多30个线程
while(threadCount>30)
Thread.sleep(50);
threadCount+=1;
Ipp=newIp(ip);
}
publicvoidPingAll()throwsException{
threadCount=0;
ping=newHashtable();
while(next())//next()对一切局域网Ip放到cur
Ping(cur.ip);
//等着一切Ping停止
while(threadCount>0)
Thread.sleep(50);
}
publicvoidrun(){
try{
Processp=Runtime.getRuntime().exec("ping"+ip+"-w300-n1");
InputStreamReaderir=newInputStreamReader(p.getInputStream());
LineNumberReaderinput=newLineNumberReader(ir);
//读取了局行
for(inti=1;i<7;i++)
input.readLine();
Stringline=input.readLine();
if(line.length()<17||line.substring(8,17).equals("timedout"))
ping.put(ip,newBoolean(false));
else
ping.put(ip,newBoolean(true));
//线程停止
threadCount-=1;
}catch(IOExceptione){}
}
publicstaticvoidmain(String[]args)throwsException{
Ipip=newIp();
ip.PingAll();
java.util.Enumerationkey=ping.keys();
Stringk;
while((k=(String)key.nextElement())!=null)
System.out.println(k+":"+ping.get(k));
}
}
1.使用Ping对照愚昧,可是绝对复杂些
2.假如Ping乐成后,用nbtstat还能够失掉主机名,以后用户名,MAC地点...统统尽在把握中:)
Java编译的是字节码,跟C++相反,启动不够快,效率不够高,难以精确控制内存,但是优点是编程比C++容易,代码比较安全但是容易留下性能隐患,跨平台靠字节码在各个平台复制(一处编译到处调试) |
|