socket介面在讀寫資料時,都是按字串的方式接收的,若要傳輸乙個「結構化的資料」,就需要使用序列化和反序列化。
序列化是將資料由多變到一的過程,反序列化是將資料由一分為多的過程。
ip位址唯一標識公網當中的一台主機
埠號唯一標識互聯**定主機上的特定程序。
每一對埠號加ip位址能夠唯一標識網路中一台主機上唯一的網路程序,將其稱為套接字,因此所有的網路行為本質上都是程序間通訊。
ipv4位址
誰上網給誰分配,即ip位址自動分配服務—dhcp
ip位址替換—nat(很多使用者上網通過同乙個路由器傳送資料,因此只給路由器分配乙個ip位址,傳輸資料時將源ip位址替換為路由器的ip位址,再由路由器分配資料)
ipv6位址
資料:無符號16個位元組(128bits)
目前基本使用ipv4而不使用ipv6的原因:ipv6並不向下相容ipv4
port埠
用於唯一標識主機上處理主機的程序(pid的標識是不固定的,每次系統重啟都可能會重新分配程序pid)。
資料:無符號2個位元組(0–65535)的整數 uint16_t
在網路上傳送資料需要:源埠、源ip、目的埠、目的ip、協議(sip、sport、dip、dport、proto)稱之為五元組,用來標識網路中的一條通訊。
網路位元組序
位元組序:cpu對資料進行訪問的順序(儲存大小大於1位元組的資料)
大端位元組序:低位址存高位 即低位址對應訪問資料的高位,高位址存低位資料
小端位元組序:低位址存低位,即低位址對應訪問地位位址,高位址對應訪問高位資料
主機位元組序 不一定是大端/小端的,取決於cpu架構,需要判斷。intel cpu的架構是x86架構,位元組序是小端位元組序。
若通訊雙方無法確定對方電腦的位元組序的時候,傳送大於乙個位元組序 儲存的資料就有可能造成資料錯誤。因此採用解決方法:**不管主機是大端還是小端,在網路通訊時統一使用大端位元組序進行通訊。(網路位元組序就是大端位元組序)**網路位元組序能保證程式的可移植性。
對於大於乙個位元組序的資料就需要位元組序轉換:short int long float double
兩台主機之間進行網路程式設計,必定有一方是主動方,主動發起請求,這一端就是客戶端,另一端稱之為服務端。客戶端(主動方)---->請求---->服務端(被動方)
網路通訊時,鏈路層使用乙太網協議(eth),網路層使用ip協議,傳輸層使用tcp或udp協議
==(面)==傳輸層選擇tcp還是udp?分析利弊,視使用場景而定
網路資料傳送流程:網絡卡接收資料後,將資料放入記憶體的緩衝區中,每乙個套接字都有乙個緩衝區
scoket介面:作業系統提供的一套網路程式設計介面
linux下一切皆檔案:基於udp協議的網路程式程式設計以d打頭的是目錄型檔案
以-打頭的是普通檔案
以b打頭的是塊裝置檔案
以c打頭的是字元裝置檔案
以l打頭的是軟鏈結檔案
以p打頭的是管道檔案
以s打頭的是網路套接字檔案
客戶端:
建立套接字,建立與網絡卡的關聯
傳送資料sendto()
接收資料recvfrom()
關閉套接字,釋放資源close()
基於tcp協議的網路程式程式設計
tcp的服務端會為,每乙個客戶端都建立乙個新的socket,用這個新的socket專門跟客戶端進行通訊。一開始建立的socket,可以接收所有客戶端的連線請求,一旦與客戶端連線建立成功,作業系統會為客戶端建立單獨的socket進行資料通訊。一開始的socket稱之為:監聽socket(僅用於建立連線),後邊為每個客戶端建立的socket稱之為:資料傳輸socket(專門用於資料傳輸)
服務端:
1.建立套接字socket()
2.為套接字繫結位址資訊bind()
3.開始監聽(開始接收連線請求+建立佇列以確定最大的併發連線數:已完成連線佇列和未完成連線佇列)listen();connect()
4.獲取連線成功的客戶端socket描述符
5.通過新的socket接收/傳送資料(客戶端已傳送連線請求,因此此時誰先傳送資料都可以)send/recv
6.關閉socket cose();
客戶端:
1.建立套接字
2.繫結(不推薦主動繫結位址)
3.向服務端發起連線請求
4.接收/傳送資料
5.關閉socket
網路套接字(socket)
include uint32 t htonl uint32 t hostlong 主機位元組序轉網路位元組序 uint32 t htons uint32 t hostshort uint32 t ntohl uint32 t hostlong 網路位元組序轉主機位元組序 uint32 t ntohl...
socket網路套接字
爬蟲的概念 爬蟲的應用 1.資料採集 大資料時代來臨,資料就是核心,資料就是生產力,越來越多的企業開始注重收集使用者資料,而爬蟲技術是收集資料的一種重要手段。2.搜尋引擎 3.模擬操作 爬蟲也被廣泛用於模擬使用者操作,測試機械人,灌水機械人等。爬蟲難點主要分為兩個方向 資料的獲取 網路公共資源都是為...
網路程式設計 Socket 套接字
網路程式設計 目前較為流行的網路程式設計模型是客戶機 伺服器 c s 結構。即通訊雙方一方作為服務 器等待客戶提出請求並予以響應。客戶則在需要服務時向伺服器提出申請。伺服器一般作為 守護程序始終執行,監聽網路埠,一旦有客戶請求,就會啟動乙個服務程序來響應該客 戶,同時自己繼續監聽服務埠,使後來的客戶...