使用socket进行通断的测试,速度慢,求解!
各位,小弟在尝试使用socket与网络内其他计算机通断测试时,速度奇慢,不知何故,望各位帮助.
代码如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import QzjxxDao;
import Qzjxx;
public class MonitorClient {
Socket socket;
BufferedReader in;
PrintWriter out;
long connTime;
Date currTime = new Date();
private ArrayList aList = new ArrayList();
public ArrayList aListOut = new ArrayList();
private Qzjxx qzjxx = new Qzjxx();
private QzjxxDao qzjxxDao = new QzjxxDao();
public MonitorClient() {
try{
aList = qzjxxDao.getQzjxxAll();
for(int i = 0; i < aList.size(); i++){
qzjxx = (Qzjxx)aList.get(i); //获取服务器信息(IP,端口等)
try{
connTime = System.currentTimeMillis();
socket = new Socket(qzjxx.getIp(), Integer.parseInt(qzjxx.getPort().trim()));
connTime = System.currentTimeMillis() - connTime;
socket.close();
qzjxx.setZtbz("正常"); //连接状态
qzjxx.setConnTime(String.valueOf(connTime)); //连接时长
qzjxx.setConnImg("connOk.gif'>"); //连接状态图片
}catch(IOException e){
if (e.getCause() == null){
qzjxx.setZtbz("失败");
qzjxx.setConnTime("Time Out");
qzjxx.setConnImg("connClose.gif'>");
}
}
qzjxx.setCurrTime(DoFormatDate(currTime,true)); //当前连接时间
aListOut.add(qzjxx);
}
}catch (Exception e){
e.getStackTrace();
}
}
/**
* Description : 格式化显示日期型数据
* @param Date dt_in :日期型数据
* boolean bShowTimePart_in : 是否显示时间部分
* @return String 格式化后的日期格式
*/
public String DoFormatDate(java.util.Date dt_in, boolean bShowTimePart_in) {
if (bShowTimePart_in)
return (new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")).format(dt_in);
else
return (new SimpleDateFormat("yyyy-MM-dd")).format(dt_in);
}
/**
* @return 返回 aListOut。
*/
public ArrayList getAListOut() {
return aListOut;
}
/**
* @param listOut 要设置的 aListOut。
*/
public void setAListOut(ArrayList listOut) {
aListOut = listOut;
}
}
问题点数:20、回复次数:7Top
1 楼numbwood(木头)回复于 2006-03-03 13:35:16 得分 0
求解啊,朋友们Top
2 楼numbwood(木头)回复于 2006-03-03 16:23:06 得分 0
只有自己顶一下了,不然沉到底了.Top
3 楼yanhan0615(炮炮)回复于 2006-03-03 18:14:28 得分 0
太长了Top
4 楼numbwood(木头)回复于 2006-03-06 10:04:15 得分 0
晕,这么点代码也算长啊?Top
5 楼sandyen(杉叶)回复于 2006-03-06 10:18:32 得分 20
Socket在建立的时候是非常浪费资源的,连接时间也比较长,根本就不适合用来判断远程机器是否能连接。
建议你使用ping命令,通过ping可以知道远程机器是否可以ping通。Top
6 楼numbwood(木头)回复于 2006-03-06 11:12:01 得分 0
sandyen(杉叶) 朋友,您好。因为我们客户需要通过WEB来监控对各个服务器的状态,所以我们只有通过程序来模拟PING命令,由于没有找到合适的监控办法,所以只有想到通过socket的连接失败与否来判断是否通与不通,如果您有更好的解决办法,不防告诉,在下感激不尽。Top
7 楼numbwood(木头)回复于 2006-03-06 11:16:18 得分 0
还有个问题是,我们的各个服务器端口就只开启了我们需要的端口,其他端口都是屏蔽的。如果使用ping命令,也无法获知服务器的状态。Top




