您好,登錄后才能下訂單哦!
TCP的C/S架構是什么樣的,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
服務器首先啟動一個net.Listen(),這個net.Listen()從名字上看好像是啟動一個監聽,實際上這是由于套接字socket最早期設計的原因,在Go語言設計的時候還是沿用了Unix當初設計的思想,直接把函數名拿過來了,這個函數初學的同學都會有一個誤解,認為它是監聽,實際上它不是,這個listen()函數不是真正的監聽客戶端,要監聽的話監聽什么?
要監聽客戶端和我的連接,但是這個Listen不是監聽客戶端,而是我設置服務器監聽的資源(IP、端口),Accept()才是真正監聽的,那言外之意,監聽嘛,我等著你對我進行訪問吧,那就是說,你沒訪問我之前是不是應該一直處于等待狀態,一會兒我們寫程序看一下,是在Listen()的時候等著還是在Accept的時候等著,所以Accept是表示接受的意思,當它Accpet調用起來以后,它就等著客戶端和我建立連接,比方說,圖示上已經說了,它會阻塞等待用戶建立連接,那言外之意,我沒有用戶建立連接之前它就一直阻塞在那里等待著,實際上監聽是在Accept的時候才發起的,當然Accept不是無源之水,它必要Listen設置好了連接方式(tcp還是udp)、IP地址以及端口以后才能阻塞去監聽,當有一個客戶端和服務器發起請求之后,我調Accept()函數完成了,那就說明我服務器和客戶端之間的連接建立好了。
接來下干什么呢?進行數據傳輸,我建立好連接的目的就是為了進行數據傳遞,我們這里假定那一般實際上也是這樣,客戶端主動找服務器建立連接,連接建立好了,客戶端先發送數據給服務器,服務器被動的接受客戶端發來的請求,被動接受客戶端請求數據,接受到了請求以后,服務器進行相應的分析處理,處理完以后把你要請求的數據回寫回去,服務端Read()是讀取客戶端發送過來的請求,Write()是我把你的請求處理完之后再給你寫回去,當這些都做完了,說明我們跟客戶端的一次通信就完成了,那這個時候我們就可以關閉連接。當然如果你還想后續繼續通信的話,這個close()關閉就要延遲。
客戶端這個流程很簡單,因為服務器先要站出來在那兒等著客戶端和我建立連接,所以說,服務器就得先啟動,客戶端相當于是我得等你服務器啟動起來以后你都準備好了,我在給你發送訪問請求,客戶端發送訪問請求,也是調用一個函數,叫做net.Dail()函數,這個Dail()函數會對阻塞的Accept()發送一個請求,如果服務器準備好,Accept()返回的時候,Dail也返回,咱們就說客戶端和服務器建立好了連接,客戶端先發送數據,所以客戶端先是一個寫操作。
發送完數據,服務器那邊讀到客戶端請求進行處理,處理完之后寫回來,客戶端再Read()讀取服務器寫回來的數據,讀完以后客戶端也可以做簡單處理,比方說我讀到了以后,打印顯示,完成了寫,完成了讀,一次跟網絡端的通信也就完成了,客戶端可以關閉連接,大致的流程就是這樣。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。