[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 410
  • Last Modified:

slow socket connection

I would like to create a TCP/IP connection to a scales in the local network.
In Java 1.5 it takes 4-5 seconds while telnet can build up the connection immediately.
What can be wrong?

My code is the following:

long time = System.currentTimeMillis();
InetAddress addr = InetAddress.getByName("192.168.0.20");
System.out.println(System.currentTimeMillis() - time);
// running time: 90 ms

time = System.currentTimeMillis();
Socket socket = new Socket(addr, 8000);
System.out.println(System.currentTimeMillis() - time);
// running time: 4617 ms

How can it be made faster?

Thanks, Peter
0
pallosp
Asked:
pallosp
  • 4
  • 3
  • 3
1 Solution
 
Ajay-SinghCommented:
looks like some systematic issue, can you post the strace result on the java program.

If you are running your program like this:

java Client

to capture system call trace, run as

strace java Client
and post the results.
0
 
girionisCommented:
When you create a socket it has to go through some security issues in order to see if the socket is allowed a connection to the specified host and port. This might be the problem. I suggest you do a few things.

a) Try the following in the command line: java -Djava.net.preferIPv4Stack=true <your programme> It is possible that if your operating system supports IPv6 Java may be trying to use this and if it fails then Java tries IPv4. Try forcing Java to use only IPv4.
b) Try your programme with earlier versions of java and see if you get the same results.
c) Try your programme with different computers and operating systems. It might be an os-specific problem.
0
 
pallospAuthor Commented:
Is it a Linux command? I don't find it in jdk 1.5.0_09.
I'm currently developing in Windows XP although finally the application will be deployed on a Linux server.
0
Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

 
girionisCommented:
No, it is a property that you pass dynamically in the JVM.

java -Djava.net.preferIPv4Stack=true <your application>
0
 
pallospAuthor Commented:
I thought of strace. While I was writing my comment Ajay-Singh's was the only answer.
0
 
girionisCommented:
I think he probably meant trace.
0
 
Ajay-SinghCommented:
I mean strace  - unix commands that prints system calls made by the application and their timings.
0
 
pallospAuthor Commented:
Finally I could localize the error. The socket connection is slow only in JRockit JVM. After updating to BEA JRockit(R) JDK 5.0 Update 6 (R26.3.0-32) its speed became tolerable, although DNS name resolution is still 4 times, and building up the connection is 2 times slower than in Sun JVM. The -Djava.net.preferIPv4Stack=true option doesn't have effect on speed.

I uploaded the strace.log at http://www.novekdm.hu/strace.log if you're interested in.
0
 
Ajay-SinghCommented:
> I uploaded the strace.log at http://www.novekdm.hu/strace.log if you're interested in.

I am not able to access this site.
0
 
pallospAuthor Commented:
I don't know why you can't download the log, anyway here is another copy:
http://pallosp.fw.hu/strace.log
0

Featured Post

Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

  • 4
  • 3
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now