更新時間:2020-05-11 16:29:16 來源:動力節(jié)點 瀏覽3034次
Socket是兩個程序之間進行雙向數(shù)據(jù)傳輸?shù)木W(wǎng)絡(luò)通訊端點,有一個地址和一個端口號來標識。每個服務(wù)程序在提供服務(wù)時都要在一個端口進行,而想使用該服務(wù)的客戶機也必須連接該端口。Socket因為是基于傳輸層,所以它是比較原始的通訊協(xié)議機制。通過Socket的數(shù)據(jù)表現(xiàn)形式為字節(jié)流信息,因此通訊雙方要想完成某項具體的應(yīng)用則必須按雙方約定的方式進行數(shù)據(jù)的格式化和解釋,我們可以看出使用Socket編程比較麻煩,但是它具有更強的靈活性和更廣泛的使用領(lǐng)域。
服務(wù)器端:
InputStream——輸入流,是用來接收來自客戶端的數(shù)據(jù)。
OutputStream——-輸出流,是服務(wù)器向客戶端發(fā)送的數(shù)據(jù)。
客戶端:
InputStream——輸入流,是用來接收來自服務(wù)端的數(shù)據(jù)。
OutputStream——-輸出流,是客戶端向服務(wù)器端發(fā)送的數(shù)據(jù)。
下面我們就通過具體的代碼來演示一下
Server端
首先調(diào)用ServerSocket類以某個端口號為參數(shù),創(chuàng)建一個ServerSocket對象,即是服務(wù)器端的服務(wù)程序在該指定端口監(jiān)聽的Socket。
服務(wù)器端程序使用ServerSocket對象的accept()方法,接收來自客戶機程序的連接請求,此時服務(wù)器端將一直保持停滯狀態(tài),直到收到客戶端發(fā)來的連接請求,此時該方法將返回一個新建的Socket類的實例,代表和客戶機建立的通訊鏈路在服務(wù)程序內(nèi)的通訊端點。如果采用Java的多線程編程方法,可以實現(xiàn)并發(fā)服務(wù)器,繼續(xù)監(jiān)聽來自其他客戶的連接請求。
使用新建的Socket對象創(chuàng)建輸入、輸出流對象。
使用流對象的方法完成和客戶端的數(shù)據(jù)傳輸,按約定協(xié)議識別并處理來自客戶端的請求數(shù)據(jù),并把處理的結(jié)果返回給客戶端。
客戶端工作完畢后,則服務(wù)器端程序關(guān)閉和客戶端通訊的流和通訊的Socket。
在服務(wù)器程序運行結(jié)束之間,應(yīng)當關(guān)閉用來監(jiān)聽的Socket.
下面來看看具體的代碼實現(xiàn)
Client客戶端
首先調(diào)用Socket類的構(gòu)造函數(shù),以服務(wù)器的指定的IP地址或指定的主機名和指定的端口號為參數(shù),創(chuàng)建一個Socket流,在創(chuàng)建Socket流的過程中包含了向服務(wù)器請求建立通訊連接的過程實現(xiàn)。
建立了客戶端通訊Socket后。就可以使用Socket的方法getInputStream()和getOutputStream()來創(chuàng)建輸入/輸出流。這樣,使用Socket類后,網(wǎng)絡(luò)輸入輸出也轉(zhuǎn)化為使用流對象的過程。
使用輸入輸出流對象的相應(yīng)方法讀寫字節(jié)流數(shù)據(jù),因為流連接著通訊所用的Socket,Socket又是和服務(wù)器端建立連接的一個端點,因此數(shù)據(jù)將通過連接從服務(wù)器得到或發(fā)向服務(wù)器。這時我們就可以對字節(jié)流數(shù)據(jù)按客戶端和服務(wù)器之間的協(xié)議進行處理,完成雙方的通訊任務(wù)。
待通訊任務(wù)完畢后,我們用流對象的close()方法來關(guān)閉用于網(wǎng)絡(luò)通訊的輸入輸出流,在用Socket對象的close()方法來關(guān)閉Socket。
下面我們來看看客戶端代碼
這樣我們就完成java采用Socket實現(xiàn)簡單的網(wǎng)絡(luò)編程,這兩個類可以直接復(fù)制運行
以上就是動力節(jié)點java培訓(xùn)機構(gòu)的小編針對“Java socket編程步驟,實現(xiàn)網(wǎng)絡(luò)編程”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743