【发布时间】:2014-07-08 11:05:45
【问题描述】:
我有 1 台机器,我使用以下脚本对其进行了 ping 操作
import java.io.PrintStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
class SimplePing
{
static void connectAndPing(String host, int port, int loop, int pingLoop, int socketTimeout){
if(loop>0){
SocketAddress sAdress;
Socket kkSocket;
for(int i=0;i<loop;i++){
sAdress = new InetSocketAddress(host, port);
for(int j=0;j<pingLoop;j++){
try {
kkSocket = new Socket();
kkSocket.connect(sAdress, socketTimeout);
kkSocket.close();
Thread.sleep(1000L);
} catch (Exception e) {
System.out.println(e);
}
System.out.print("!");
}
}
}
}
public static void main(String[] args)
{
String host = args[0];
int port = Integer.parseInt(args[1]);
int socketTimeout = Integer.parseInt(args[2]);
int loop = 100000;
int pingLoop = 100;
System.out.println("Begin ping. . .");
connectAndPing(host, port, loop, pingLoop, socketTimeout);
System.out.println("End ping. . .");
}
}
它给了我这样的结果(不要打扰标记,这只是我的评论)
然后我尝试使用 UNIX ping 工具 ping,然后得到
这是远程机器信息:
**SunOS msgbkrpapp18 5.10 Generic_138888-03 sun4v sparc SUNW,SPARC-Enterprise-T5120
java 版本“1.6.0_26”
Java(TM) SE 运行时环境(内部版本 1.6.0_26-b03)
Java HotSpot(TM) 服务器虚拟机(内部版本 20.1-b02,混合模式)**
为什么我得到不同的结果?哪个更有效?
我的消息应用程序正在使用端口 8000,它接受来自外部 IP 的连接,我的客户抱怨应用程序有时已关闭,他使用上述 java 程序读取系统健康状况。
如果我在app端检查,没有遇到异常情况,甚至连接的线程池也没有达到最大值。
有什么建议吗?? 谢谢
【问题讨论】:
-
但是上面的代码不能运行,因为变量
j是第二个for循环的本地变量。但是代码在int mark = i * j + 100的范围之外使用它。你确定,这是正确的可编译示例:-) -
你说得对,我已经编辑了我的帖子:),
标签: java linux unix networking