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

2018-05-03 17:38 更新

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

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

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

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

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

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

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

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

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

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

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

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

按流向分類:

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

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

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

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

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

按功能分類:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

連接時候3次握手:

釋放時候4次揮手:

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號