2013-07-12 42 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