2013-07-12 40 views
-1

我有使用套接字的客户端/服务器程序。 在服务器侧我有如何在java中减少套接字连接时间?

ServerSocket s=new ServerSocket(8888); 
s.setSoTimeout(10000); 
Socket incoming=s.accept(); 
ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream()); 
ObjectInputStream ios = new ObjectInputStream(s.getInputStream()); 
s.close(); 
oos.close(); 
ios.close(); 
incoming.close(); 

在客户端我有

Socket s=new Socket("172.17.20.47", 8888);  
ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream()); 
ObjectInputStream ios = new ObjectInputStream(s.getInputStream()); 
s.close(); 
oos.close(); 
ios.close(); 

当我测量像的时间:

long start= System.CurrentTimeMillis();  
Socket incoming=s.accept(); 
long end= System.CurrentTimeMillis(); 
System.out.println(end-start); 

我表明Socket incoming=s.accept();花费〜450ms。 我该如何缩短这个时间?因为所有代码的其余部分需要大约15ms。计算机之间

平是< 1ms的

+4

'accept()'被阻塞,直到发出请求。所以你的时间测量不准确。 –

回答

0

答案上,这将是阅读Eng.Fouad的评论。 ServerSocket类中的accept函数等待直到传入请求到来。 如果您在启动客户端代码之前已经等了5个小时,接受功能将耗费18000000ms!你不能使这个功能更快,它已经尽可能地快。

(笑话:你可以减少启动客户更快接受功能的时间。):)

希望你能理解为什么接受功能用不了这么多时间(实际上它”不是)。

+0

但是,事情是我在服务器的同一时间开始客户端,并且他们在连接之前做了相同的计算量 –

+1

accept()花了多长时间并不相关。你所测量的是“同时”的真正含义。你应该测量的是连接客户端的时间。 – EJP