国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

淺談以java為基礎(chǔ)的Socket通信簡(jiǎn)介及實(shí)現(xiàn)

2017-04-20 18:34陶艷芳
青春歲月 2017年5期

【摘要】我們都知道現(xiàn)在通過(guò)各種網(wǎng)絡(luò)工具可以實(shí)現(xiàn)數(shù)據(jù)之間的交流,但是,卻很少有人去理解實(shí)現(xiàn)的原理,本論文就通過(guò)使用java語(yǔ)言,自己來(lái)編寫(xiě)程序,實(shí)現(xiàn)計(jì)算機(jī)中數(shù)據(jù)的交流,通過(guò)閱讀本論文,你會(huì)了解到什么是Socket,什么是端口號(hào),如何使用java來(lái)實(shí)現(xiàn)一個(gè)Socket通信。相信本論文一定會(huì)為你在編程領(lǐng)域有所幫助。

【關(guān)鍵詞】Socket;端口號(hào);java

一、引言

要想自己動(dòng)手實(shí)現(xiàn)Socket編程,我們首先要知道什么是Socket,在此之前,我們就不得不提到TCP協(xié)議,這里我們不要把TCP看得多么高大上,我們只要知道,數(shù)據(jù)如果想要在網(wǎng)絡(luò)中進(jìn)行傳輸,那么就必須要遵守這個(gè)協(xié)議,就像你要成為中華人民共和國(guó)的公民,你首先就必須有國(guó)家承認(rèn)的身份證一樣,這樣我們才能動(dòng)手做其他事情。有了TCP協(xié)議為基礎(chǔ),那我們就可以通過(guò)java語(yǔ)言中提供的類(lèi)來(lái)實(shí)現(xiàn)Socket編程。

二、java中需要使用到的類(lèi)

java是一門(mén)面向?qū)ο蟮恼Z(yǔ)言,所謂面向?qū)ο?,只是我們編程的一種思想,在java語(yǔ)言沒(méi)有誕生之前,我們使用到的面向過(guò)程的編程方式,面向過(guò)程就是我們?cè)诰幊讨行枰绞裁矗蔷蛣?chuàng)造出來(lái),就像你要去銀行取錢(qián),你要坐車(chē)去,那么你就要?jiǎng)?chuàng)造出一輛車(chē),你要使用ATM機(jī),那么就要?jiǎng)?chuàng)造出一臺(tái)ATM機(jī)。而使用面向?qū)ο蟮姆绞剑褪悄阈枰母鞣N東西之前就給你創(chuàng)造好了,你要取錢(qián),你只要輸入密碼和余額就是了。而java中提供了類(lèi)的概念,就想人類(lèi),就是一個(gè)java中的類(lèi),而毛主席就是人類(lèi)的一個(gè)個(gè)體,在java中我們稱(chēng)毛主席就是人類(lèi)的一個(gè)對(duì)象。對(duì)于Socket編程而言,java中也提供了相應(yīng)的類(lèi),我們只要熟練使用那些類(lèi),就能夠?qū)崿F(xiàn)本論文的目標(biāo)。

在java中,以及提供了客戶端的Socket類(lèi),而服務(wù)器端,有ServerSocket類(lèi),通過(guò)其中的各種屬性和方法,以及在java中常用的輸入流和輸出流等相關(guān)只是,我們就能簡(jiǎn)單的實(shí)現(xiàn)Soket編程。

三、Soket通信模型

現(xiàn)在,我們有了TCP協(xié)議為基礎(chǔ),有了java語(yǔ)言作為媒介,那么就可以開(kāi)始去理解Soket通信模型。首先,我們需要建立服務(wù)器端Server,創(chuàng)建一個(gè)客戶端Client,然后在Server端的指定端口進(jìn)行監(jiān)聽(tīng),所謂的端口,就好像是門(mén)牌號(hào)一樣,客戶端可以通過(guò)ip地址找到對(duì)應(yīng)的服務(wù)器端,但是服務(wù)器端是有很多端口的,每個(gè)應(yīng)用程序?qū)?yīng)一個(gè)端口號(hào),通過(guò)類(lèi)似門(mén)牌號(hào)的端口號(hào),客戶端才能真正的訪問(wèn)到該服務(wù)器。當(dāng)Client客戶端創(chuàng)建了socket向服務(wù)器端發(fā)送請(qǐng)求后,服務(wù)器端會(huì)接收到客戶端的請(qǐng)求,并創(chuàng)建一個(gè)連接的Socket來(lái)與客戶端通信。而具體的通信,java中提供了輸入流和輸出流的概念。從而實(shí)現(xiàn)數(shù)據(jù)的交互。通信結(jié)束后,我們需要在客戶端和服務(wù)器端都關(guān)閉Socket和相應(yīng)資源,這樣一個(gè)Socket通信就完成了。

四、Socket通信實(shí)現(xiàn)步驟

1、服務(wù)器端創(chuàng)建ServerSocket對(duì)象,ServerSocket server=new ServerSocket(8888);綁定監(jiān)聽(tīng)的端口,如上表示的就是監(jiān)聽(tīng)了8888端口,然后通過(guò)server對(duì)象的accept()方法監(jiān)聽(tīng)客戶端請(qǐng)求,此時(shí)服務(wù)器端就實(shí)現(xiàn)了對(duì)客戶端的連接,通過(guò)建立連接后,可以使用字符流來(lái)接收客戶端發(fā)送過(guò)來(lái)的數(shù)據(jù),InputStream iStream=socket.getInputStream()其中的iStream對(duì)象中就保存了這些數(shù)據(jù),當(dāng)然,此時(shí)我們還可以通過(guò)InputStreamReader 和BufferReader等來(lái)包裝輸入流,然后通過(guò)while循環(huán)來(lái)將其中的數(shù)據(jù)讀取并處理相關(guān)的業(yè)務(wù)邏輯,最后關(guān)閉相應(yīng)的資源。

2、客戶端要?jiǎng)?chuàng)建Socket對(duì)象,Socket socketCli=new Socket("127.0.0.1",8888);這里是用的是Socket類(lèi),其中包裝了各種客戶端需要使用到的方法,該類(lèi)的構(gòu)造函數(shù)中有兩個(gè)參數(shù),其中第一個(gè)參數(shù)數(shù)服務(wù)器的IP地址,這里寫(xiě)的127.0.0.1,表示的是服務(wù)器地址為本機(jī),如果你要連接的服務(wù)器是遠(yuǎn)程服務(wù)器,那么你就需要寫(xiě)上你要連接的服務(wù)器的地址,而第二個(gè)參數(shù)表示的是要連接該服務(wù)器上的哪個(gè)端口號(hào),這里的端口號(hào)必須和服務(wù)器端打開(kāi)的端口號(hào)相同,如果不同,那么則無(wú)法實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接收,有了Socket示例對(duì)象后,我們需要在客戶端創(chuàng)建輸出流來(lái)向服務(wù)器端輸出數(shù)據(jù),scoketCli中有g(shù)etOutputStream()的方法來(lái)獲取輸出流,OutputStream oStream=socketCli.getOutputStream(),同理,如果我們的服務(wù)器會(huì)承受比較大的壓力的時(shí)候,我們可以使用PrintWriter來(lái)包裝該輸出流,PrintWriter writer=new PrintWriter(oStream),最后通過(guò)writer對(duì)象的write方法來(lái)將要發(fā)送的數(shù)據(jù)發(fā)送出去,這樣服務(wù)器端才能接收到客戶端發(fā)送的數(shù)據(jù),值得注意的是,無(wú)論是服務(wù)器端還是客戶端,我們都必須是關(guān)閉相關(guān)的資源,因?yàn)槿绻麤](méi)有及時(shí)的關(guān)閉,服務(wù)器可能會(huì)出現(xiàn)莫名其妙的錯(cuò)誤。

在編寫(xiě)好代碼后,我們需要注意幾點(diǎn),因?yàn)檫@是服務(wù)端和客戶端的交互,所以首先我們?cè)谶\(yùn)行的時(shí)候必須先開(kāi)啟服務(wù)器端,就像你取錢(qián)的時(shí)候,肯定是要先有銀行的,當(dāng)然,運(yùn)行服務(wù)器的時(shí)候,端口號(hào)如果被占用的話,系統(tǒng)會(huì)提示端口被占用的信息,此時(shí)你需要使用一個(gè)另外的端口號(hào),而客戶端中,上面的代碼因?yàn)槭褂玫氖潜緳C(jī),所以IP地址設(shè)置為127.0.0.1,如果你是連接其他電腦,那么只需要將該IP地址修改即可。

五、結(jié)論

從上面的代碼我們可以得到下面的結(jié)論,在我們開(kāi)啟服務(wù)端,并監(jiān)聽(tīng)了指定的端口,那么如果有客戶端連接,通過(guò)java的各種手段,服務(wù)器端就可以獲取到客戶端發(fā)送過(guò)來(lái)的數(shù)據(jù),從中我們也應(yīng)該知道了所謂的TCP和IP以及端口號(hào)的使用,很多東西也許看上去生澀難懂,但是只要我們實(shí)際的動(dòng)手去操作了,特別是編程,那么就會(huì)很容易的去理解。當(dāng)然,上面只是一個(gè)很小的例子,實(shí)際的開(kāi)發(fā)中會(huì)更加的困難,但是只要我們掌握了基本的知識(shí)點(diǎn),那么就可以在實(shí)際的開(kāi)發(fā)中一點(diǎn)一點(diǎn)的去學(xué)習(xí),從而達(dá)到更高的一個(gè)水平。

【作者簡(jiǎn)介】

陶艷芳(1994—),女,漢族,湖南人,邵陽(yáng)學(xué)院魏源國(guó)際學(xué)院2013級(jí)通信工程專(zhuān)業(yè)在讀。