我想用socket不断的连接,以测试服务器是否正常,应该如何写

litsnake1 2004-08-16 11:55:53
我曾经写的一段代码,就是在线程中,不断用socket去连接服务器,但是我觉得这个代码很有问题,大家请看:

public void run()
{
Socket socket = null;
while (!bEnd)
{
try
{
socket = new Socket(服务器ip,port);
System.out.println("服务器正常!");
}
catch(Exception e)
{
System.out.println("服务器出现异常!");
}
finalley
{
try
{
socket.close();
}
catch(Exception e)
{}
}
try
{
Thread.sleep(50000);
}
catch(Exception e)
{}

}
}

这个大家觉得有没有问题?如果有更好的方法请贴出来大家看看

如果没有更好的方法的话,能只能希望改善这段代码了,我觉得最不好的就是每运行一次,就创建一个socket,如果检测服务器的时间间隔很短的话,那么对资源应该是一个很大的浪费,请问能重复你一个socket来进行检测呢,应该怎么做
...全文
216 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
andy_zhang_ping 2004-08-17
  • 打赏
  • 举报
回复
finalley
{
try
{
socket.close();
}
catch(Exception e)
{}
}
finalley是什么意思
litsnake1 2004-08-17
  • 打赏
  • 举报
回复
首先谢谢各位
,我意思其实在我上面的线程中,在不断的new一个socket,频繁创建socket开销比较大,能创建一个socket后,然后就用这个对象去不断的连接,这也是

象这样

socket = new Socket(id,port);
socket.connect();
socket.close();

过一段时间再conect一下看看是不是还能连上服务器,这样就能用一个socket对象就能进行n次与同一个服务器的连接,

而不用每次都要new一个socket来进行检测

不知道我的想法,行不行,
litsnake1 2004-08-17
  • 打赏
  • 举报
回复
是finally写错了,谢谢指正

伤桥说的很有道理,但是问题是我不会在java中使用win api,

也谢谢天空,
eureka0891 2004-08-17
  • 打赏
  • 举报
回复
同意楼上的,
你关闭连接后就把对象都不得释放了,
占不了什么资源啊,
你再开连接时就是另外的连接,当然得重新分配资源了
lu8088 2004-08-17
  • 打赏
  • 举报
回复
楼上说的有理,但是我认为你只是在台机器上这么做。如果不断开的话,那么你要在多少机器上连接呢?首保守连接的意思就是我有五十台电脑与主机服务器连接,那么一个长连接就不会断开。
我对于这一方面的知识不是很深入的了解。
shangqiao 2004-08-17
  • 打赏
  • 举报
回复
"重复你一个socket来进行检测"
怎么重复?当你新建新建一个Socket时,可能使用TCP协议在网路上建立了一个连接的可靠的通信的通道,而将信息传输完毕以后,这个通道将断调,不然路由器的负担时无法想象的,而UDP协议虽然是不面向连接的不可靠协议,但是也是非常号时的一件事,所以根本就不可能,但是你的意思可能是将连接参数放到内存中,而不用重新初始化,但是JDK里面好像没有这样的方法吧,但是我估计使用win api可能可以吧,因为它将初始化Socket连接信息和建立连接是分开的,试试吧
perryhg 2004-08-17
  • 打赏
  • 举报
回复
可是这样并不是线程模型啊,你希望多少个client socket并发连接服务器呢?
qlampskyface 2004-08-17
  • 打赏
  • 举报
回复
楼上说的没错

不错如果你需要验证socket是正常连接的话,倒不用每次都关掉它

可以通过读取字节流来察看
shangqiao 2004-08-17
  • 打赏
  • 举报
回复
其实开销是大,但是大的不是新建一个Socket对象,而是网络的连接,和网络连接相比,在内存中初始化一个对象就根本不算什么,向你上面的代码,可以使用win api实现
heibai520 2004-08-17
  • 打赏
  • 举报
回复
帮你UP一下!
litsnake1 2004-08-16
  • 打赏
  • 举报
回复
自己先顶一个

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧