<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    三分鐘讓你看懂java網(wǎng)絡(luò)通信

    http://i-lolo.iteye.com/blog/1611562 在進(jìn)入網(wǎng)絡(luò)通信之前,讓我們來普及一點(diǎn)網(wǎng)絡(luò)基礎(chǔ)概念。如果你是有一定的計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ),請(qǐng)直接跳到第五點(diǎn)之后開始閱讀。 第一、 什么是計(jì)算機(jī)網(wǎng)絡(luò)? 書本上那些文縐縐的概念我們可以不去理,我告訴你,我們兩臺(tái)電腦連在一起就組成了一個(gè)計(jì)算機(jī)網(wǎng)絡(luò)。其實(shí)我們的電腦甚至是全世界的電腦都是連著的,只要你的電腦連著網(wǎng),你就在這個(gè)巨大的計(jì)算機(jī)網(wǎng)絡(luò)里,你也許會(huì)問為什么我和他們是連著的啊?大家知道自己是怎么上的網(wǎng)?ADSL是吧,撥號(hào)上網(wǎng)。換個(gè)比方說吧,我們?cè)诠疚覀兊碾娔X通過網(wǎng)線,雙絞線,然后是Hub(集線器),連接到胡哥的電腦,然后胡哥的機(jī)子通過撥號(hào),ADSL,連到電信的網(wǎng)關(guān)那兒,然后中國電信通過海底光纜和美國電信網(wǎng)關(guān)連接,然后再像剛剛我們連接中國電信一樣,逆推過去,連接到美國每一臺(tái)聯(lián)網(wǎng)的計(jì)算機(jī)。所以說只要你連著網(wǎng),你就是和全世界的在線用戶連著。這是一個(gè)巨大的計(jì)算機(jī)網(wǎng)絡(luò)。非常巨大。 第二、 計(jì)算機(jī)網(wǎng)絡(luò)的主要功能? 資源共享、信息傳輸與集中處理、均衡負(fù)荷與分布處理、綜合信息服務(wù)(www/綜合數(shù)字網(wǎng)絡(luò) ISDN)。這些個(gè)功能,不多說。這些你不平時(shí)都在用么?你的資源能夠上傳共享給其他人,有的人平時(shí)還很喜歡聊QQ,是吧,所以上面說的這四個(gè)也許還有更多的什么功能都是些冠冕堂皇的話,稍微看下就好。用了自然就曉得了。 第三、 什么是網(wǎng)絡(luò)通信協(xié)議? 我來問你,為什么你說話身邊的人能夠聽的懂,別人說的話你為什么也能夠聽懂,而為什么如果你去對(duì)一個(gè)外國人說話或者一個(gè)外國人來和你說話你們卻互相聽不懂呢?你會(huì)說廢話嘛因?yàn)槲艺f的是中文,是漢語,中國人說的都是漢語,而外國人說的是另一種語言,是外語。就是這樣,網(wǎng)絡(luò)通信協(xié)議就像我們的中文一樣,她就是我們之間的共同語言,他規(guī)定了我們之間怎么說話,我先說什么你再說什么,你怎么說,而我應(yīng)該怎么聽。而網(wǎng)絡(luò)通信得先規(guī)定約定一些俗成的網(wǎng)絡(luò)通信協(xié)議,先說好,兩臺(tái)計(jì)算機(jī)之間什么收發(fā)信息,信息格式是什么,信息怎么發(fā),怎么接收,而萬一出錯(cuò)怎么辦怎么處理。沒有了這個(gè)協(xié)議,兩臺(tái)電腦就不知道互相之間怎么說話,就像你對(duì)一頭大母豬說完愛你,而人家根本就不知道你在說什么。 在這兒和大家提一下網(wǎng)絡(luò)協(xié)議的分層思想。學(xué)過計(jì)算機(jī)網(wǎng)絡(luò)的同學(xué)都知道有兩種基本的國際標(biāo)準(zhǔn)分層模型,一個(gè)是OSI參考模型,一個(gè)是TCP/IP參考模型。OSI參考模型,是國際標(biāo)準(zhǔn)化組織搞出來的開放互聯(lián)傳統(tǒng)模型,一共有七層:物理/數(shù)據(jù)鏈路/網(wǎng)絡(luò)/傳輸/會(huì)話/表示/應(yīng)用。學(xué)網(wǎng)絡(luò)和硬件的一般都要熟悉這七層標(biāo)準(zhǔn),至于這七層都是干嘛的,大家自己問度娘或者自己看關(guān)于網(wǎng)絡(luò)的書去。(中南大學(xué)高陽教授主編了一本叫《計(jì)算機(jī)網(wǎng)絡(luò)原理與實(shí)用技術(shù)》的書,里邊很詳盡的介紹了這個(gè)OSI參考模型,沒記錯(cuò)的話應(yīng)該是在第一章1.4.5里,是放在TCP/IP協(xié)議之后的……)這里就不多說了,因?yàn)閷?duì)于咱們編程的軟件人員來說,實(shí)際當(dāng)中的應(yīng)用,是分為四層,也就是TCP/IP參考模型。最底層物理+數(shù)據(jù)鏈路層/網(wǎng)絡(luò)層/傳輸層/應(yīng)用層。我們編的程序是位于應(yīng)用層,所以說,我們一直是在和哪一層打交道?TCP/IP層。我們編寫一個(gè)程序發(fā)送一些數(shù)據(jù),發(fā)給傳輸層,TCP/IP層,在這一層對(duì)數(shù)據(jù)進(jìn)行封裝,按照先前約定的協(xié)議,然后走向下一層,通過網(wǎng)線,再走到物理數(shù)據(jù)鏈路層,這時(shí)候數(shù)據(jù)就變成了一連串的01010101,到達(dá)對(duì)面之后逆推上面的過程,進(jìn)行解封,ok,信息發(fā)送完畢。這兒涉及到比較多的網(wǎng)絡(luò)底層,目前我們不需要過多了解,因?yàn)槲覀円龅墓ぷ鞑恍枰私鉅砍兜降竭@么底層的東西,如果你想深入了解或者今后你想做殺毒軟件什么的,去讀《TCP/IP詳解》。 第四、 IP——(Internet Protocol網(wǎng)絡(luò)之間互連的協(xié)議)? 你不用管其他的,你只需要知道IP這個(gè)東西給我們做出的最大貢獻(xiàn),就是給我們每一臺(tái)電腦提供了一個(gè)獨(dú)一無二的IP地址。你想我的機(jī)器要和你的機(jī)器交流說話,我得知道你的機(jī)器叫什么,你的機(jī)器得有一個(gè)獨(dú)一無二的區(qū)別標(biāo)識(shí),否則的話我就不知道傳的信息有沒有傳到你那兒,也不知道這信息到底傳給誰。IP地址這東西我們都知道吧?像我的本機(jī)IP: 113.240.187.242 這是湖南省長沙市的IP。他是由四個(gè)字節(jié)組成的(也就是說每一個(gè)值不能超過255)。(這個(gè)是IPV4,能夠組成將近四億多地址,現(xiàn)在已經(jīng)出來了IPV6,高檔貨,八個(gè)字節(jié),地址數(shù)是IPV4的幾何倍數(shù))IPV4的IP地址按照其網(wǎng)絡(luò)IP段和主機(jī)IP段占的字節(jié)數(shù)分ABC三類網(wǎng)。這個(gè)這里不說,大家自己去了解,好吧?拿高陽教授的那本書翻翻。順帶看看子網(wǎng)掩碼啊網(wǎng)關(guān)啊什么的。自己去了解。在這兒我就累得給你敲了。 第五、 TCP協(xié)議和UDP協(xié)議? 好了,上一步里我們通過獨(dú)一無二的IP地址找到了對(duì)方連在了一起。我們可以通話了,關(guān)于通話我們有兩種方式: 第一、 TCP協(xié)議,什么叫TCP協(xié)議?Transmission Control Protocol 傳輸控制協(xié)議TCP是一種面向連接(連接導(dǎo)向)的、可靠的、基于字節(jié)流的運(yùn)輸層(Transport layer)通信協(xié)議。什么叫可靠的?打個(gè)比方,我們打電話,上一步通過IP找到對(duì)方就相當(dāng)于撥號(hào)打通了你的電話,你拿起電話接了,我說一句“喂?”,如果你這邊不回應(yīng),我就會(huì)杵這兒一直“喂”下去,是不?因?yàn)椴恢滥隳沁叺降捉拥搅寺牭搅宋业脑挍]有,所以你這邊一定要告訴我你聽到了你收到了我剛剛的那句信息,我才會(huì)接著給你說下面的話給你發(fā)下面的數(shù)據(jù)。我每發(fā)一次信息我要你給我確認(rèn)收到了,然后我再給你發(fā)接下來的東西,這個(gè)就叫可靠。在TCP/IP協(xié)議里邊這叫“三次握手”機(jī)制。怎么握手,握手是怎么回事,問度娘,好吧? 第二、 UDP協(xié)議。User Datagram Protocol的簡稱, 中文名是用戶數(shù)據(jù)報(bào)協(xié)議,是 OSI 參考模型中一種無連接的傳輸層協(xié)議。UDP這種方式相對(duì)于TCP來說更加簡單。UDP說話就是,我給你說一句話,你聽沒聽到我不管。就像發(fā)電報(bào),“黃河黃河我是長江!”哐當(dāng)一下就發(fā)出去了。不管黃河收到?jīng)]有。兩種方式一種安全可靠但是慢,一種簡單快捷但是不可靠。根據(jù)不同的需求選擇。像我們平時(shí)聊QQ開視頻啊什么的,用的就是UDP,因?yàn)槲覀儌鬏數(shù)倪@些個(gè)數(shù)據(jù)丟個(gè)一兩個(gè)包什么的無所謂,頂多就是視頻多了幾個(gè)馬賽克,是吧。那么平時(shí)我們玩的網(wǎng)絡(luò)游戲,像CF啊魔獸世界啊,是哪一種呢?自己想,好吧? 第三、 中南-馬志丹 http://java-mzd.javaeye.com 驚喜看得到! 基礎(chǔ)普及完了,接下來我們來看看為什么要去做網(wǎng)絡(luò)通信。這一段我就簡單點(diǎn)說。在計(jì)算機(jī)剛出來那會(huì)兒 ,那時(shí)候的人們都覺得計(jì)算機(jī)這東西就是主要為計(jì)算而存在的就是一個(gè)計(jì)算工具,但是自從1983年起,TCP\IP協(xié)議的出現(xiàn),讓計(jì)算機(jī)從此轉(zhuǎn)變?yōu)榱巳藗兊囊粋€(gè)交流工具。自那以后,只要你有一臺(tái)電腦,不管你是開網(wǎng)頁看電影,還是上人人找朋友,不管你是登郵箱收發(fā)郵件,還是登QQ聊天,你的生活的方方面面都離不開那電腦屏幕后邊的網(wǎng)絡(luò)技術(shù)。換句話說,如果沒有了網(wǎng)絡(luò)通信技術(shù),電腦以及大多數(shù)軟件將會(huì)失去他們?cè)械纳Α>拖褚豢么髽錄]有根。沒有網(wǎng)絡(luò)通信就沒有如今繁榮的QQ世界,沒有了網(wǎng)絡(luò)通信,世界上那些個(gè)IT巨頭諸如IBM諸如谷歌,將會(huì)如斷線風(fēng)箏落日殘陽。我想說,如果你不懂網(wǎng)絡(luò)通信技術(shù),你就不是一個(gè)合格的程序員,如果你不精通網(wǎng)絡(luò)通信技術(shù),你就無法開發(fā)出一款真正優(yōu)秀的營運(yùn)軟件!除非你想永遠(yuǎn)停留在枯燥的單機(jī)時(shí)代,你想讓自己的技術(shù)永遠(yuǎn)留在表層。 現(xiàn)在,讓我們來考慮如何實(shí)現(xiàn)。 在做實(shí)現(xiàn)之前,我想先讓大家明白幾個(gè)概念: 1) Socket A. 兩個(gè)Java應(yīng)用程序可通過一個(gè)雙向的網(wǎng)絡(luò)通信連接實(shí)現(xiàn)數(shù)據(jù)交換,這個(gè)雙向鏈路的一端稱為一個(gè)Socket B. Socket通常用來實(shí)現(xiàn)client-server連接 C. Java.net包中定義的兩個(gè)類Socket和ServerSocket,分別用來實(shí)現(xiàn)雙向連接的client和server端 D. 建立連接時(shí)所需要的尋址信息為遠(yuǎn)程計(jì)算機(jī)的IP地址和端口號(hào)(Port number) 上面我們提到了IP地址,那是每一臺(tái)電腦獨(dú)一無二的一個(gè)地址標(biāo)識(shí),是為了對(duì)方計(jì)算機(jī)能夠找得到你給你發(fā)信息。建立連接我們很顯然需要這個(gè)信息才能夠完成。那么這個(gè)端口號(hào)又是用來干什么的呢?舉個(gè)例子,假如說我電腦上現(xiàn)在上著人人和QQ,你的電腦上也是上著人人和QQ,如果我用QQ給你發(fā)一條消息他怎么知道就發(fā)到你的QQ上而不會(huì)在你的人人上呢?是吧?所以說光用IP地址是無法區(qū)分到不同的應(yīng)用程序的。所以需要端口號(hào)來達(dá)到這個(gè)作用。端口號(hào)在計(jì)算機(jī)內(nèi)部是用兩個(gè)字節(jié)來表示,也就是說總共有65536個(gè)端口。在這兒需要注意下面兩個(gè)點(diǎn): ?1.1024之前的端口我們自己編的程序不要征用它,因?yàn)檫@些端口是給系統(tǒng)用的。比如說80端口,胡哥給咱們講過的。干嘛的?負(fù)責(zé)處理HTTP上網(wǎng)訪問網(wǎng)頁等等的端口。還有就是21端口,F(xiàn)TP的,是吧?還有其他的一些著名端口,想知道問度娘去,好吧?在這里就不羅嗦了。 ?2.TCP端口和UDP端口是分開的,比如說TCP有個(gè)8888端口,他和你的UDP8888端口是不一樣的。 ?3.上述每一類有65536個(gè)端口。也就是說我們的計(jì)算機(jī)能夠運(yùn)行131072個(gè)程序,只要你電腦吃得消。 既然要實(shí)現(xiàn)通信,那我們肯定要確定兩個(gè)通信對(duì)象,一個(gè)是服務(wù)器對(duì)象server,一個(gè)是客戶端對(duì)象client。我們需要知道,這兩個(gè)對(duì)象是兩個(gè)應(yīng)用程序,他們的對(duì)話,是兩個(gè)不同的程序之間的對(duì)話。你會(huì)說我只有兩個(gè)對(duì)象也還沒法實(shí)現(xiàn)他們之間的交互啊,不用急,我也知道他們兩個(gè)不是神仙會(huì)心有靈犀。兩個(gè)對(duì)象之間想要實(shí)現(xiàn)互相之間的信息交互,就必須要有一個(gè)通道。這個(gè)通道就像是一根管子,一頭扎在服務(wù)器端,一頭插在客戶端。信息就在這根管子里來來往往。這根管子怎么插呢,插在哪兒呢?這個(gè)時(shí)候就需要用到剛剛提到的Socket了。 Socket的意思呢就是一個(gè)插座,服務(wù)器和客戶端各有一個(gè)插座,安插在各自的一個(gè)端口上,管子插在這兩個(gè)插座上,然后在他們這兩個(gè)端口上接入數(shù)據(jù)流。Socket通常用來實(shí)現(xiàn)server-client連接。Java里面有一個(gè)包java.net,他下邊有定義了兩個(gè)類,Socket和ServerSocket,分別用來實(shí)現(xiàn)雙向連接的server端和client端。 接下來我們來建立TCP服務(wù)器端和客戶端。 服務(wù)器端:我們用的是ServerSocket,新建一個(gè)server插座,并且交給他一個(gè)端口號(hào),這個(gè)插座他有一個(gè)非常方便的構(gòu)造方法ServerSocket(int port),讓他知道自己監(jiān)聽哪一個(gè)端口,然后新建一個(gè)socket對(duì)象,開機(jī),并用.accept語句讓他處在待機(jī)狀態(tài),等待接受client的接入。一旦有客戶端接入就將它賦給新建的Socket對(duì)象,并且用.getInputStream以及.getOutputStream命令獲得他的輸入輸出流。這個(gè)流,就是一根管子,信息都在這根管子里流通。這樣說東西不怎么好說,那么我們就在這個(gè)流上面再包一層,將這個(gè)流封裝成DataOutputStream(),DataInputStream。然后就可以利用輸出流(這個(gè)是相對(duì)于服務(wù)器來說,這個(gè)輸出流到了客戶端就成了輸入流了)來.write信息,利用輸入流來.read()獲取客戶端發(fā)來的信息。Ok,接收完了,.close關(guān)閉輸入輸出流,以及關(guān)閉socket,關(guān)機(jī)。 客戶端:寫法和服務(wù)器端有點(diǎn)類似,新建一個(gè)插座,這兒需要留意的是,客戶端需要用到的插座是Socket而不是ServerSocket,新建一個(gè)Socket牌插座,同樣用他的Socket(String host,int port)構(gòu)造方法方法給他一個(gè)IP地址和端口號(hào),讓它撥打區(qū)號(hào)以及具體電話號(hào),這個(gè)和服務(wù)器端的IP地址以及端口號(hào)要一致,ok,這個(gè)時(shí)候server就相當(dāng)于申請(qǐng)連接到服務(wù)器的某一個(gè)端口上了。兩個(gè)程序就等于是連接上了。但是有些人就會(huì)問了啊,這只是客戶端申請(qǐng)連接,人家服務(wù)器接不接受呢。好,前面我們的服務(wù)器不是提到了.accept么,這個(gè)方法就是用來接受客戶端的,這個(gè)時(shí)候就是:你申請(qǐng)連接,我接受連接,接下來,照著上面服務(wù)器一樣,客戶端也獲取到自己的輸入輸出流,封裝,用輸出流寫出信息。咱們之間就可以互相通信了。還有一個(gè)問題啊,要是如果有另一個(gè)客戶端接入了呢?簡單,那就再.accept一下。如果有N多客戶端接入,那就不斷的.accept,不斷循環(huán)它。這個(gè)問題大家都知道可以用while語句。 具體的敲法,請(qǐng)看我給大家附上的代碼實(shí)現(xiàn)。下面給大家看下Socket通信模型。看著這個(gè)模型,再回頭看看上面給大家嘮叨的那些個(gè)點(diǎn),我想大家都知道服務(wù)器和客戶端該怎么去寫怎么去實(shí)現(xiàn)通信了吧? 好了,這一段“三分鐘讓你看懂”到此就結(jié)束了,想來大家對(duì)網(wǎng)絡(luò)通信也該有了一個(gè)相對(duì)清晰的認(rèn)識(shí)。如果你還想了解學(xué)習(xí)更多的網(wǎng)絡(luò)通信方面的知識(shí),如果你還想知道如何去實(shí)現(xiàn)一些更多的通信功能,比如建立公共聊天室實(shí)現(xiàn)群聊,又比如建立一個(gè)以互聯(lián)網(wǎng)為基礎(chǔ)的以網(wǎng)絡(luò)畫板為主體的協(xié)助平臺(tái),又比如,你想做一個(gè)自己的軟件來實(shí)現(xiàn)像QQ一樣MSN一樣或者像人人桌面一樣的各種功能……請(qǐng)繼續(xù)關(guān)注我們的隨后更新。請(qǐng)記住,我們是ZCL,我們是一群簡單快樂的牧碼人! 后記:第一篇正兒八經(jīng)的技術(shù)日志,4K多全手打,這樣說起來應(yīng)該蠻自豪的感覺。但是說實(shí)話還是覺得自己寫的有些亂。自己只是把課堂上老師們講的一些知識(shí)點(diǎn),根據(jù)自己敲的代碼以及做了的一些課堂筆記,羅列了出來。也查了一些在線資料和書籍,像度娘,像學(xué)校發(fā)的那本我都沒怎么動(dòng)過的《計(jì)算機(jī)網(wǎng)絡(luò)原理和實(shí)用技術(shù)》。在前面花了好些篇幅來講計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)知識(shí),是因?yàn)槲医o自己定下的目標(biāo)就是讓任何一個(gè)人甚至你是沒怎么學(xué)過接觸過java或者計(jì)算機(jī)網(wǎng)絡(luò)這一塊,看了我的博客之后,都能夠?qū)W(wǎng)絡(luò)通信有一個(gè)比較清晰的認(rèn)識(shí),而讓接觸過java的人知道怎么樣初步的去實(shí)現(xiàn)兩個(gè)軟件或者說程序之間的通信,知道他們之間是怎么回事兒并且自己動(dòng)手實(shí)現(xiàn)它。這確實(shí)是一個(gè)有點(diǎn)難度的過程。但是你如果把這個(gè)都搞定了,那么,你的java網(wǎng)絡(luò)通信就基本可以說入了一個(gè)門了。我似乎聽見了胡哥用他那一慣的口吻在我身后說,這種程度,要說入門還早的很呢!當(dāng)然咯,就算我現(xiàn)在做到網(wǎng)絡(luò)畫圖板做到網(wǎng)絡(luò)文件傳輸,也感覺自己只是進(jìn)了一個(gè)門,門后的世界無比之大,等待我們不斷的去探索,去創(chuàng)新,去創(chuàng)造它。生命有限,學(xué)海無涯;人有老時(shí),學(xué)無止境嘛。發(fā)現(xiàn)的問題蠻多。但獲得的收獲也不少。果然檢驗(yàn)自己是否學(xué)會(huì)掌握一個(gè)東西的最好辦法就是嘗試著去教給別人。只有你能夠很清晰的把事兒給別人說清楚了教會(huì)了,你才能說自己懂了。寫完這篇博客,感覺自己對(duì)網(wǎng)絡(luò)通信的理解又加深了一些,對(duì)其中的一些知識(shí)點(diǎn)的掌握也更加牢靠了一些。只言片語薄聞淺見,希望大家多多批評(píng)不吝賜教! 最后的最后:用胡哥的一句話來與君共勉吧! 標(biāo)準(zhǔn)即平庸,合格即廢物。 (附)服務(wù)器端代碼: Java代碼 收藏代碼 package con120722; import java.net.*; import java.io.*; public class Server { private ServerSocket ss; private Socket socket; private BufferedReader in; private PrintWriter out; public Server() { try { ss = new ServerSocket(10000); while (true) { socket = ss.accept(); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(socket.getOutputStream(),true); String line = in.readLine(); out.println("you input is :" + line); out.close(); in.close(); socket.close(); } } catch (IOException e) {} } public static void main(String[] args) { new Server(); } } 客戶端代碼: Java代碼 收藏代碼 package con120722; Java代碼 收藏代碼 import java.io.*; import java.net.*; public class Client { Socket socket; BufferedReader in; PrintWriter out; public Client() { try { socket = new Socket("localhost", 10000); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(socket.getOutputStream(),true); BufferedReader line = new BufferedReader(new InputStreamReader(System.in)); out.println(line.readLine()); line.close(); out.close(); in.close(); socket.close(); } catch (IOException e) {} } public static void main(String[] args) { new Client(); } }

    posted on 2016-06-23 10:02 youngturk 閱讀(245) 評(píng)論(0)  編輯  收藏 所屬分類: 筆試題

    <2016年6月>
    2930311234
    567891011
    12131415161718
    19202122232425
    262728293012
    3456789

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    this year :
    1 jQuery
    2 freemarker
    3 框架結(jié)構(gòu)
    4 口語英語

    常用鏈接

    留言簿(6)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊(cè)

    EJB學(xué)習(xí)

    Flex學(xué)習(xí)

    learn English

    oracle

    spring MVC web service

    SQL

    Struts

    生活保健

    解析文件

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲毛片不卡av在线播放一区| 97人妻精品全国免费视频| 亚洲人配人种jizz| 亚洲麻豆精品果冻传媒| 亚洲人成网站影音先锋播放| 国产V亚洲V天堂无码| 亚洲av中文无码乱人伦在线r▽| 国产亚洲精品福利在线无卡一| 精品亚洲一区二区三区在线观看 | 国产精品偷伦视频免费观看了| 免费人成在线观看播放a| 边摸边吃奶边做爽免费视频99| 香蕉国产在线观看免费| 一级女人18片毛片免费视频| 国产日韩久久免费影院| 免费看无码特级毛片| 99久久免费观看| 一级女人18毛片免费| 成年美女黄网站色大免费视频| 日本一道一区二区免费看| 国产一卡二卡≡卡四卡免费乱码| 免费乱码中文字幕网站| 亚洲三区在线观看无套内射| 亚洲国产精品不卡在线电影| 亚洲一级高清在线中文字幕| 亚洲精品精华液一区二区| 日本一区二区三区在线视频观看免费 | 成人永久免费高清| 亚洲国产91精品无码专区| 亚洲熟妇av一区二区三区| 内射少妇36P亚洲区| 色噜噜亚洲男人的天堂| 午夜亚洲国产精品福利| 中文成人久久久久影院免费观看| 日日麻批免费40分钟无码| 国产免费av片在线看| 亚洲精品无码99在线观看 | 成年女人永久免费观看片| 国产亚洲欧洲Aⅴ综合一区 | 亚洲一区二区三区偷拍女厕| 亚洲精品无码久久久久久久|