TCP的C/S架構(gòu)是什么樣的,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
創(chuàng)新互聯(lián)專注于靖邊企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),成都商城網(wǎng)站開發(fā)。靖邊網(wǎng)站建設(shè)公司,為靖邊等地區(qū)提供建站服務(wù)。全流程按需搭建網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
服務(wù)器首先啟動(dòng)一個(gè)net.Listen(),這個(gè)net.Listen()從名字上看好像是啟動(dòng)一個(gè)監(jiān)聽,實(shí)際上這是由于套接字socket最早期設(shè)計(jì)的原因,在Go語(yǔ)言設(shè)計(jì)的時(shí)候還是沿用了Unix當(dāng)初設(shè)計(jì)的思想,直接把函數(shù)名拿過來了,這個(gè)函數(shù)初學(xué)的同學(xué)都會(huì)有一個(gè)誤解,認(rèn)為它是監(jiān)聽,實(shí)際上它不是,這個(gè)listen()函數(shù)不是真正的監(jiān)聽客戶端,要監(jiān)聽的話監(jiān)聽什么?
要監(jiān)聽客戶端和我的連接,但是這個(gè)Listen不是監(jiān)聽客戶端,而是我設(shè)置服務(wù)器監(jiān)聽的資源(IP、端口),Accept()才是真正監(jiān)聽的,那言外之意,監(jiān)聽嘛,我等著你對(duì)我進(jìn)行訪問吧,那就是說,你沒訪問我之前是不是應(yīng)該一直處于等待狀態(tài),一會(huì)兒我們寫程序看一下,是在Listen()的時(shí)候等著還是在Accept的時(shí)候等著,所以Accept是表示接受的意思,當(dāng)它Accpet調(diào)用起來以后,它就等著客戶端和我建立連接,比方說,圖示上已經(jīng)說了,它會(huì)阻塞等待用戶建立連接,那言外之意,我沒有用戶建立連接之前它就一直阻塞在那里等待著,實(shí)際上監(jiān)聽是在Accept的時(shí)候才發(fā)起的,當(dāng)然Accept不是無源之水,它必要Listen設(shè)置好了連接方式(tcp還是udp)、IP地址以及端口以后才能阻塞去監(jiān)聽,當(dāng)有一個(gè)客戶端和服務(wù)器發(fā)起請(qǐng)求之后,我調(diào)Accept()函數(shù)完成了,那就說明我服務(wù)器和客戶端之間的連接建立好了。
接來下干什么呢?進(jìn)行數(shù)據(jù)傳輸,我建立好連接的目的就是為了進(jìn)行數(shù)據(jù)傳遞,我們這里假定那一般實(shí)際上也是這樣,客戶端主動(dòng)找服務(wù)器建立連接,連接建立好了,客戶端先發(fā)送數(shù)據(jù)給服務(wù)器,服務(wù)器被動(dòng)的接受客戶端發(fā)來的請(qǐng)求,被動(dòng)接受客戶端請(qǐng)求數(shù)據(jù),接受到了請(qǐng)求以后,服務(wù)器進(jìn)行相應(yīng)的分析處理,處理完以后把你要請(qǐng)求的數(shù)據(jù)回寫回去,服務(wù)端Read()是讀取客戶端發(fā)送過來的請(qǐng)求,Write()是我把你的請(qǐng)求處理完之后再給你寫回去,當(dāng)這些都做完了,說明我們跟客戶端的一次通信就完成了,那這個(gè)時(shí)候我們就可以關(guān)閉連接。當(dāng)然如果你還想后續(xù)繼續(xù)通信的話,這個(gè)close()關(guān)閉就要延遲。
客戶端這個(gè)流程很簡(jiǎn)單,因?yàn)榉?wù)器先要站出來在那兒等著客戶端和我建立連接,所以說,服務(wù)器就得先啟動(dòng),客戶端相當(dāng)于是我得等你服務(wù)器啟動(dòng)起來以后你都準(zhǔn)備好了,我在給你發(fā)送訪問請(qǐng)求,客戶端發(fā)送訪問請(qǐng)求,也是調(diào)用一個(gè)函數(shù),叫做net.Dail()函數(shù),這個(gè)Dail()函數(shù)會(huì)對(duì)阻塞的Accept()發(fā)送一個(gè)請(qǐng)求,如果服務(wù)器準(zhǔn)備好,Accept()返回的時(shí)候,Dail也返回,咱們就說客戶端和服務(wù)器建立好了連接,客戶端先發(fā)送數(shù)據(jù),所以客戶端先是一個(gè)寫操作。
發(fā)送完數(shù)據(jù),服務(wù)器那邊讀到客戶端請(qǐng)求進(jìn)行處理,處理完之后寫回來,客戶端再Read()讀取服務(wù)器寫回來的數(shù)據(jù),讀完以后客戶端也可以做簡(jiǎn)單處理,比方說我讀到了以后,打印顯示,完成了寫,完成了讀,一次跟網(wǎng)絡(luò)端的通信也就完成了,客戶端可以關(guān)閉連接,大致的流程就是這樣。
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。