如何使數(shù)據(jù)在客戶機和服務(wù)器之間傳遞?
我們還是從計算機的網(wǎng)絡(luò)層說起,主要是分為7個層分別是 物理層,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,傳輸層,會話層,表示層,應(yīng)用層。
數(shù)據(jù)之間的交互主要在傳輸層這一塊。通常用到的底層協(xié)議有TCP和UDP這兩種協(xié)議。通過中間層SOCKET協(xié)議,進(jìn)行包裝,再往上就是我們經(jīng)常用到的HTTP協(xié)議。我們的網(wǎng)站就是通過HTTP協(xié)議進(jìn)行客戶端和服務(wù)器數(shù)據(jù)交互的。
HTTP協(xié)議是面向連接的協(xié)議基于TCP。按照三次握手四次揮手的規(guī)則進(jìn)行數(shù)據(jù)交互。其中底層有用到網(wǎng)絡(luò)套接字的概念。通過網(wǎng)絡(luò)套接字,可以知道相互通信的IP地址和端口,這樣就像你打電話一樣,知道對方的手機號才能打給指定的人。
上面這個就是我們網(wǎng)站的http協(xié)議請求,里面有請求頭,請求體。按照標(biāo)準(zhǔn)的約定去給服務(wù)端發(fā)送請求數(shù)據(jù),然后服務(wù)端響應(yīng)結(jié)果給客戶端。同時我們的實時聊天軟件,比如今日頭條的聊天軟件就是通過TCP,SOCKET來進(jìn)行通信的,這種是面向連接的長鏈接方式,雙向通信。響應(yīng)指定封包協(xié)議和解包協(xié)議,通過socket的處理,去監(jiān)聽兩端的端口,分別獲取各自的數(shù)據(jù),和發(fā)送各自的數(shù)據(jù)。實現(xiàn)雙向通信。具體過程如下:> 客戶端步驟
1. 創(chuàng)建套接字
2. 向服務(wù)器發(fā)送連接請求(connect)
3. 通信(send/recv)
4. 關(guān)閉套接字
> 服務(wù)器端步驟
1. 創(chuàng)建用于監(jiān)聽的套接字(socket)
2. 將套接字綁定到本地地址和端口上(bind)
3. 將套接字設(shè)為監(jiān)聽模式(listen)
4. 等待客戶請求(accept),此處要不斷的調(diào)用accept
5. 通信(send/receive),完成后返回4
6. 關(guān)閉套接字(closesocket)
謝謝閱讀,歡迎關(guān)注。