我正在進行一項實驗,以查看java在TCP中需要多長時間。首先我啓動服務器。然後多次調用函數client_tcp,超過50000次。並測量連接所需的時間,併發送和接收1個字節。當服務器獲得多於16384個請求(有時會有所不同)時,客戶端無法連接到服務器。Java TCP服務器在接收到16384個字節後不接受客戶端請求MAC OS
我不知道是否因爲服務器套接字中的接收緩衝區大小。就我而言,ss.getReceiveBufferSize()= 131072
下面是代碼:
public synchronized void server_tcp(int port) {
ServerSocket ss;
Socket so;
InputStream is;
OutputStream os;
try {
ss = new ServerSocket(port);
} catch (Exception e) {
System.out.println("Unable to connect to port " + port +
" TCP socket.");
return;
}
while (true) {
try {
so = ss.accept();
is = so.getInputStream();
os = so.getOutputStream();
int ch = is.read();
os.write(65);
so.close();
} catch (IOException e) {
System.out.println("Something went wrong.");
} catch (InterruptedException e) {
System.out.println("Bye.");
}
}
}
public void client_tcp(String host, int port) {
Socket so = null;
InputStream is = null;
OutputStream os = null;
try {
so = new Socket(host, port);
} catch (UnknownHostException e) {
System.err.println("Error Host not found.");
return;
} catch (IOException e) {
Syste.err.println("Error Creating socket.");
return;
}
try {
os = so.getOutputStream();
is = so.getInputStream();
os.write(65);
is.read();
os.close();
is.close();
so.close();
} catch (IOException e) {
System.err.println("Error.");
return;
}
}
有什麼不對?
謝謝。
嘗試從控制檯窗口運行「netstat -a」,系統釋放關閉的套接字需要時間。當你從本地機器連接到本地機器時,你將佔用兩個插槽,機器至多有64k,其中很大一部分將被其他程序使用。 – BevynQ
它將是一個低級別的東西(JVM,本地代碼),在代碼中不是問題,也不是buff大小:您不會將讀取值存儲到buff中。 – 2012-12-27 01:34:50
你的測試沒有意義。沒有一個合理的寫客戶端會發送和接收一個字節,然後關閉連接。嘗試測試和衡量真正發生的事情。 @BevynQ你正在混淆帶有端口的套接字。 – EJP