日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java backlog满_java socket参数详解:BackLog

發(fā)布時(shí)間:2025/3/20 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java backlog满_java socket参数详解:BackLog 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

輸入連接指示(對(duì)連接的請(qǐng)求)的最大隊(duì)列長(zhǎng)度被設(shè)置為 backlog 參數(shù)。如果隊(duì)列滿時(shí)收到連接指示,則拒絕該連接。

注意:

1. backlog參數(shù)必須是大于 0 的正值。如果傳遞的值等于或小于 0,則假定為默認(rèn)值。

2. 經(jīng)過(guò)測(cè)試這個(gè)隊(duì)列是按照FIFO(先進(jìn)先出)的原則。

3. 如果將accept這個(gè)函數(shù)放在一個(gè)循環(huán)體中時(shí),backlog參數(shù)也不會(huì)有什么作用。或者簡(jiǎn)單的講運(yùn)行ServerSocket的這個(gè)線程會(huì)阻塞時(shí),無(wú)論是在accept,還是在read處阻塞,這個(gè)backlog參數(shù)才生效。

建一個(gè)ServerSocket實(shí)例,綁定到端口10000,backlog設(shè)置為2

package socket;

import java.io.*;

import java.net.*;

import org.apache.log4j.Logger;

public class Test_backlog {

private static Logger logger = Logger.getLogger(Test_backlog.class);

public static void main(String[] args) throws Exception {

BufferedReader in = null;

PrintWriter out = null;

int backlog = 2;

ServerSocket serversocket = new ServerSocket(10000, backlog);

while (true) {

logger.debug("啟動(dòng)服務(wù)端......");

int i;

Socket socket = serversocket.accept();

logger.debug("有客戶端連上服務(wù)端, 客戶端信息如下:" + socket.getInetAddress() + " : " + socket.getPort() + ".");

in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

out = new PrintWriter(socket.getOutputStream(), true);

do {

char[] c = new char[1024];

i = in.read(c);

logger.debug("服務(wù)端收到信息: " + new String(c, 0, i));

} while (i == -1);

out.close();

in.close();

socket.close();

logger.debug("關(guān)閉服務(wù)端......");

}

}

}

服務(wù)端日志:

0 [main] DEBUG socket.Test_backlog - 啟動(dòng)服務(wù)端......

3871 [main] DEBUG socket.Test_backlog - 有客戶端連上服務(wù)端, 客戶端信息如下:/127.0.0.1 : 4176.

18888 [main] DEBUG socket.Test_backlog - 服務(wù)端收到信息: 發(fā)送完信息我就斷掉。

18888 [main] DEBUG socket.Test_backlog - 關(guān)閉服務(wù)端......

18889 [main] DEBUG socket.Test_backlog - 啟動(dòng)服務(wù)端......

18890 [main] DEBUG socket.Test_backlog - 有客戶端連上服務(wù)端, 客戶端信息如下:/127.0.0.1 : 4177.

45316 [main] DEBUG socket.Test_backlog - 服務(wù)端收到信息: 我是第二個(gè)客戶端,發(fā)完后我也斷掉。

45316 [main] DEBUG socket.Test_backlog - 關(guān)閉服務(wù)端......

45316 [main] DEBUG socket.Test_backlog - 啟動(dòng)服務(wù)端......

45317 [main] DEBUG socket.Test_backlog - 有客戶端連上服務(wù)端, 客戶端信息如下:/127.0.0.1 : 4178.

52501 [main] DEBUG socket.Test_backlog - 服務(wù)端收到信息: 最后一個(gè)拉。

52501 [main] DEBUG socket.Test_backlog - 關(guān)閉服務(wù)端......

使用TCP工具連接這個(gè)服務(wù)端

1. 當(dāng)?shù)谝粋€(gè)客戶端連接時(shí),服務(wù)端打出如下信息:

6629 [main] DEBUG socket.Test_backlog - 有客戶端連上服務(wù)端, 客戶端信息如下:/127.0.0.1 : 4110.

2. 當(dāng)?shù)诙€(gè)客戶端連接時(shí),服務(wù)端沒(méi)有打出任何東東。因?yàn)檫@時(shí)客戶端如果雖然顯示成功了,但是被阻在連接隊(duì)列中。

3. 當(dāng)?shù)谌齻€(gè)客戶端連接時(shí),情況與2相同。

4. 當(dāng)?shù)谒膫€(gè)客戶端連接時(shí),連接不上并報(bào)錯(cuò)。因?yàn)閎acklog參數(shù)設(shè)置成2,隊(duì)列中只有阻塞兩個(gè)。

總結(jié): 管理客戶連接請(qǐng)求的任務(wù)是由操作系統(tǒng)來(lái)完成的。操作系統(tǒng)把這些連接請(qǐng)求存儲(chǔ)在一個(gè)先進(jìn)先出的隊(duì)列中。許多操作系統(tǒng)限定了隊(duì)列的最大長(zhǎng)度,一般為50。當(dāng)隊(duì)列中的連接請(qǐng)求達(dá)到了隊(duì)列的最大容量時(shí),服務(wù)器進(jìn)程所在的主機(jī)會(huì)拒絕新的連接請(qǐng)求。只有當(dāng)服務(wù)器進(jìn)程通過(guò)ServerSocket的accept()方法從隊(duì)列中取出連接請(qǐng)求,使隊(duì)列騰出空位時(shí),隊(duì)列才能繼續(xù)加入新的連接請(qǐng)求。 對(duì)于客戶進(jìn)程,如果它發(fā)出的連接請(qǐng)求被加入到服務(wù)器的隊(duì)列中,就意味著客戶與服務(wù)器的連接建立成功,客戶進(jìn)程從Socket構(gòu)造方法中正常返回。如果客戶進(jìn)程發(fā)出的連接請(qǐng)求被服務(wù)器拒絕,Socket構(gòu)造方法就會(huì)拋出ConnectionException。

總結(jié)

以上是生活随笔為你收集整理的java backlog满_java socket参数详解:BackLog的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。