Win a copy of Think Java: How to Think Like a Computer Scientist this week in the Java in General forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Socket connections

 
Rowan Chattaway
Ranch Hand
Posts: 75
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi, I'm having a little trouble with Socket's!
public boolean isConnected(String ipAddress)
{
final int dayTimePort = 13;
final int pingPort = 7003;
final int telnetPort = 23;
BufferedReader in = null;
Socket socketComputer = null;
try
{
socketComputer = new Socket(ipAddress, dayTimePort);
//in = new BufferedReader(new InputStreamReader(socketComputer.getInputStream()));
//String timeStamp = in.readLine();
return true;
}
catch(UnknownHostException e)
{
return false;
}
catch(IOException e)
{
return false;
}
}
This is used to check whether any of our critical systems have gone down, the boolean returned is used to determine what image and set of actions to do/display on the intranet site I'm developing.
The above code works fine, however testing it by giving it a fake ipaddress, i.e. one that doesn't exists( to act as a 'down' system) - the socket connection takes ages to conclude that it can't make a connection. This causes trouble by causing the page to display very very slowly.
Can anyone think of a way of improving this?
Any help would be very much appreciated!
Rowan.
 
Peter den Haan
author
Ranch Hand
Posts: 3252
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The socket is spending an awful lot of time trying to establish the TCP connection to the target IP, and I don't know of a way to tweak this (although such a way may well exist).
But really, what seems to be getting in your way is that TCP is an intelligent protocol that handshakes with the other end to guarantee packet delivery, etc. The problem may be more suited to datagrams. You can use a DatagramSocket to send a DatagramPacket to the remote host, then try to receive() a response packet for a limited amount of time (see DatagramSocket.setSoTimeout() -- I assume there will be a DatagramSocket sitting at the other end to actually send that response). Beware that datagram delivery is not guaranteed, so unless you're on a LAN you will want to try a few times before concluding that the remote host is down.
- Peter
[ May 10, 2002: Message edited by: Peter den Haan ]
 
Rowan Chattaway
Ranch Hand
Posts: 75
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Many thanks, I'll shall try that!
Rowan.
 
Maalti Iyer
Ranch Hand
Posts: 52
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Try using the method setSoTimeOut(long sec) on the socket object - I believe, the default value is zero (indefinite wait)
I hope this helps.
Maalti.
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic