京東茅臺搶購腳本可以分為以下幾部分,具體實現步驟如下: 登錄京東賬號 首先需要登錄京東賬號。一個簡單的方式是使用Python的 selenium 庫。在使用 selenium 庫前,需要安裝 selenium 庫和對應的瀏覽器驅動。 示例代碼如下所示: from selenium import we ...
1. TCP/IP協議棧
鏈路層:負責下圖所示物理鏈接標準
IP層(網路層):選擇合適的路徑傳輸數據,無法解決數據傳輸錯誤問題,所以需要TCP/UDP協議作為保障
TCP/UDP(傳輸層):IP層(網路層)解決傳輸路徑問題,確定了路徑,就進行傳輸數據,IP層只關註一個數據包如何進行傳輸,至於傳輸過程數據包是否損壞,傳輸多個包順序的控制,IP層無法解決,上述的問題都由TCP/UDP(傳輸層解決),TCP/UDP(傳輸層)在IP層(網路層)之上,決定主機之間數據傳輸方式,給不可靠IP協議賦予可靠性。
應用層:提供封裝將上述的幾個層進行封裝,提供給外部socket(套接字)讓我們進行編程,我們進行編寫的代碼一般都是在編寫應用層協議。
2. 實現基於TCP的伺服器與客戶端
2.1 TCP伺服器預設調用函數順序
調用socket函數創建套接字,聲明並初始化地址信息結構體變數,調用bind函數向套接字分配地址。
2.1.1 進入等待請求連接狀態 listen()
服務端調用listen()函數進入等待請求連接狀態,等待客戶端連接,此時客戶端才可以調用connect()函數進行連接。
2.1.2 受理客戶端連接請求
2.2 客戶端調用順序
2.2.1 客戶端向服務端請求連接
2.2.2 客戶端套接字信息賦值
2.3 基於TCP的服務端/客戶端函數調用關係
3. TCP原理
3.1 TCP套接字中的/O緩衝
3.2 TCP內部工作原理1:與對方套接字的連接
3.3 TCP內部工作原理2:與對方主機的數據交換
3.4 TCP的內部工作原理3:斷開與套接字的連接
TCP存在粘包問題(TCP沒有數據邊界),
解決方式:
1. 發送固定長度的消息
2. 把消息的尺寸與消息一塊發送
3. 使用特殊標記來區分消息間隔
我解決的方式是客戶端在發送的時候確定發送的數據長度,客戶端接受服務端的數據每次讀取一個位元組,
如果確定客戶端之前發送了20個位元組的數據那麼,迴圈read20次讀取,但是實際實現的時候一般是一次性就讀取了一次read讀取了所有的數據。