網(wǎng)絡(luò)編程

2018-05-03 17:38 更新

筆者能力有限,總結(jié)有誤的地方,請(qǐng)讀者協(xié)作更正。

1.理解同步、異步、阻塞、非阻塞?

同步:執(zhí)行一個(gè)操作之后,等待結(jié)果,然后才繼續(xù)執(zhí)行后續(xù)的操作

異步:執(zhí)行一個(gè)操作的同時(shí)之后,可以執(zhí)行其他操作,然后等待通知在回來執(zhí)行剛才沒有執(zhí)行完成的操作。

阻塞:進(jìn)程給CPU傳達(dá)一個(gè)任務(wù)之后,一直等待CPU處理完成,然后才之后后面的操作。

非阻塞:進(jìn)程給CPU傳達(dá)任務(wù)之后,繼續(xù)處理后續(xù)的操作,隔一段時(shí)間再來詢問之前的操作是否完成。

2.Java中如何實(shí)現(xiàn)無阻塞方式的Socket編程?

NIO解決了多線程服務(wù)器存在的線程開銷問題;

NIO中使用多線程的目的是實(shí)現(xiàn)少量線程為多個(gè)客戶端服務(wù),達(dá)到線程的復(fù)用。

3.Java中有幾種類型的流?說出分別有哪些類?

JDK提供的流繼承了四大類:

InputStream(字節(jié)輸入流),OutputStream(字節(jié)輸出流), Reader(字符輸入流),Writer(字符輸出流)。

按流向分類:

輸入流:?程序可以從中讀取數(shù)據(jù)的流。 輸出流:?程序能向其中寫入數(shù)據(jù)的流。

按數(shù)據(jù)傳輸單位分類:

字節(jié)流:以字節(jié)(8位二進(jìn)制)為單位進(jìn)行處理。主要用于讀寫諸如圖像或聲音的二進(jìn)制數(shù)據(jù)。

字符流:以字符(16位二進(jìn)制)為單位進(jìn)行處理。

都是通過字節(jié)流的方式實(shí)現(xiàn)的。字符流是對(duì)字節(jié)流進(jìn)行了封裝,方便操作。在最底層,所有的輸入輸出都是字節(jié)形式的。后綴是Stream是字節(jié)流,而后綴是Reader,Writer是字符流。

按功能分類:

節(jié)點(diǎn)流:從特定的地方讀寫的流類,如磁盤或者一塊內(nèi)存區(qū)域。

過濾流:使用節(jié)點(diǎn)流作為輸入或輸出。過濾流是使用一個(gè)已經(jīng)存在的輸入流或者輸出流連接創(chuàng)建的。

4.用JAVA SOCKET?編程,讀服務(wù)器幾個(gè)字符,再寫入本地顯示。

客戶端向服務(wù)器端發(fā)送連接請(qǐng)求后,就被動(dòng)地等待服務(wù)器的響應(yīng)。

典型的TCP客戶端要經(jīng)過下面三步操作:

1)創(chuàng)建一個(gè)Socket實(shí)例:構(gòu)造函數(shù)向指定的遠(yuǎn)程主機(jī)和端口建立一個(gè)TCP連接;

2)通過套接字的I/O流與服務(wù)端通信;

3)用Socket類的close方法關(guān)閉連接。

服務(wù)端的工作是建立一個(gè)通信終端,并被動(dòng)地等待客戶端的連接。

典型的TCP服務(wù)端執(zhí)行如下兩步操作:

1、創(chuàng)建一個(gè)ServerSocket實(shí)例并指定本地端口,用來監(jiān)聽客戶端在該端口發(fā)送的TCP連接請(qǐng)求;

2、重復(fù)執(zhí)行: 1)調(diào)用ServerSocket的accept()方法以獲取客戶端連接,并通過其返回值創(chuàng)建一個(gè)Socket實(shí)例;

2)為返回的Socket實(shí)例開啟新的線程,并使用返回的Socket實(shí)例的I/O流與客戶端通信;

3)通信完成后,使用Socket類的close()方法關(guān)閉該客戶端的套接字連接。

5.TCP/IP的3次握手?釋放時(shí)候幾次握手?

連接時(shí)候3次握手:

釋放時(shí)候4次揮手:

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)