ServerSocket與Socket類
TCP最主要的特征就是能夠建立長時間的連接鹿寨,而且能夠保證數(shù)據(jù)安全的送達惭适,但是速度比較慢瓢湃。使用TCP進行連接的時候會有三次握手,之后才建立起服務(wù)器與客戶端的連接剩彬,因為TCP的鏈接習慣是詢問對方機器是否存在盛末,不存在就不會建立連接弹惦,存在才會建立連接。
示意圖:
在Java中想要使用TCP協(xié)議做編寫服務(wù)端的話悄但,需要使用到ServerSocke類棠隐,這個類是TCP協(xié)議的。
TCP協(xié)議的操作類都在java.net包下放著檐嚣,ServerSocket類就是服務(wù)器端助泽,服務(wù)器插座,Socket這個單詞就是插座的意思。
同樣是TCP協(xié)議并與ServerSocket類相對的是Socket類嗡贺,這個類是作為一個通訊端隐解、客戶端的存在。用于去連接服務(wù)器端诫睬,這個Socket如果是從ServerSocket拿到的對象厢漩,那就是與服務(wù)器連接的那個Socket,如果是自己創(chuàng)建的Socket對象岩臣,那你就是客戶端。
在理論上可以有無限個Socket端來連接ServerSocket端宵膨,在ServerSocket端上每有一個Socket端來連接架谎,就會創(chuàng)建與之相對的Socket對象。也就是說ServerSocket端上也有Socket對象辟躏,每一個Socket就像插座上的插孔一樣谷扣,連接著通訊端的Socket對象。
示意圖:
ServerSocket類可以編寫服務(wù)器端捎琐,Socket類可以用來編寫客戶端会涎。創(chuàng)建ServerSocket對象的時候需要聲明一個端口號,這樣通訊端才能通過端口號去連接瑞凑。創(chuàng)建Socket對象的時候則需要聲明一個IP地址和ServerSocket對象的端口號末秃,這樣才能對服務(wù)端發(fā)出連接請求。在發(fā)出連接請求成功連接后籽御,Socket通訊端會創(chuàng)建兩個流练慕,一個是InputStream流一個是OutputStream流。同時技掏,ServerSocket服務(wù)器端會得到一個Socket對象铃将,然后這個Socket對象也會創(chuàng)建出InputStream流和OutputStream流想幻。
示意圖:
上面只是粗略的說一下如何建立的連接谆趾,實際上ServerSocket服務(wù)器端的Socket對象是通過accept();方法得到的累澡,這個方法監(jiān)聽著聲明的端口號片迅。一旦有通訊端來連接价认,就會創(chuàng)建Socket對象谦去,客戶端和服務(wù)器端建立連接成功之后就通過InputStream流和OutputStream流來進行交互數(shù)據(jù)囱修。
完整示意圖:
明白了兩個類之間的聯(lián)系后想诅,我們就開始嘗試編寫一個服務(wù)器端吧弧哎。我們使用瀏覽器作為Socket端雁比,因為瀏覽器也是TCP協(xié)議的,所以可以連接到我們編寫的服務(wù)器端撤嫩。(提示:如果確定編寫的代碼無誤偎捎,但是瀏覽器卻連接不到編寫的服務(wù)端,可以更換IE瀏覽器試一下)
代碼示例:
運行結(jié)果:
瀏覽器會發(fā)送一段瀏覽器的信息:
我們還可以使用字節(jié)流,讀取一些漂亮妹子照片的并通過網(wǎng)絡(luò)流輸出到瀏覽器上茴她,估計很多屌絲們就精神一震了(手動滑稽)寻拂。
代碼示例:
運行結(jié)果:
現(xiàn)在我們已經(jīng)知道如何編寫服務(wù)器端,并且知道可以使用瀏覽器作為客戶端去進行連接了丈牢,那么接下來使用Socket類進行編寫一個客戶端祭钉,簡單的與服務(wù)器端交互一下數(shù)據(jù)。服務(wù)器端的編寫和上面的第一個示例沒有區(qū)別己沛,就不過多解釋慌核。
客戶端則是需要聲明一個ip地址和端口號,這個端口號是服務(wù)器端的端口號申尼,這點要注意垮卓。然后同樣的通過流來交互數(shù)據(jù),讀取或輸出數(shù)據(jù)時师幕,需要看一下服務(wù)器端是先讀取還是先輸出粟按,服務(wù)器端先讀取的話客戶端就需要先編寫輸出數(shù)據(jù)的代碼,否則反之霹粥。關(guān)于這個誰先讀取或輸出是沒有規(guī)定的灭将,都是根據(jù)另一端的編寫的代碼來決定。
服務(wù)器端代碼示例:
客戶端代碼示例:
運行結(jié)果:
當有兩個結(jié)果并且想要兩個控制臺界面時后控,可以點擊這里庙曙,選擇NewConsoleView新建控制臺:
代碼之間的關(guān)系示意:
多網(wǎng)卡就是一臺計算機中有好幾個網(wǎng)卡,一般普通PC電腦有兩個網(wǎng)卡浩淘,一個物理網(wǎng)卡矾利,一個虛擬網(wǎng)卡。筆記本電腦則一般有三個網(wǎng)卡一個無線網(wǎng)卡馋袜,一個物理網(wǎng)卡男旗,一個虛擬網(wǎng)卡。
一般在服務(wù)器上有很多個網(wǎng)卡欣鳖,所以就有很多網(wǎng)線接口察皇,因為有些服務(wù)器會需要“三合一網(wǎng)絡(luò)”,“三合一網(wǎng)絡(luò)”就是將聯(lián)通泽台、電信什荣、移動的網(wǎng)線都接入到這臺服務(wù)器里,那這臺服務(wù)器就能同時使用三個運營商的網(wǎng)絡(luò)了怀酷。
而且因為服務(wù)器機房里一般都是有很多臺服務(wù)器在進行集群稻爬,所以也需要一部分網(wǎng)絡(luò)接口用于連接內(nèi)部的集群網(wǎng)絡(luò),一部分網(wǎng)絡(luò)接口則連接通過防火墻之類的安全措施過濾后的外部網(wǎng)絡(luò)蜕依。
多網(wǎng)卡服務(wù)器圖片: