1. 程式人生 > >【持續更新】TCP/IP筆記

【持續更新】TCP/IP筆記

在ESP8266開發上,一定會用到TCP和UDP通訊,看官方SDK原始碼,所有的通訊都是用的lwip協議棧,這個是輕量型的TCP/IP協議棧,這裡做些對應的筆記。

我用的是ESP官方的RTOS_SDK,這裡用的freeRTOS,在帶系統基礎上移植的lwip會提供三種API:對應的pdf資料下載

原生態API,協議棧API,伯克利API,我在這裡用的是伯克利API,也就是常用的socket。

專案用到的功能是,一個ESP8266做AP,4個做STA串列埠透傳,雙方通訊用的是TCP,每個都有一個256的資料buff。

一、在做TCP串列埠透傳之前測試連續發小包,250ms傳送一個200位元組的小包,server通過selecet處理多連結,這時碰到的問題是,客戶端在連線上之前,串列埠佇列就有資料了,客戶端是200位元組發的,連續傳送兩個的話,server端接受的是256+144,這樣就會出現串列埠錯報問題。這個是因為TCP/IP協議棧預設情況下會使能優化Nagle

演算法,這時候會把小包合成大包傳送出去。

問題結局,使能TCP_NODELAY,關閉Nagle演算法。程式碼如下:

int enable;
enable = 1;
ret = setsockopt(clicoon[i].sock, IPPROTO_TCP, TCP_NODELAY, (void*)&enable, sizeof(enable));

這時候就會把小包分開發送了。

二、TCPsever處理客戶端異常斷開問題,當客戶端異常斷電重連的情況是server是不知道該socket已經失效,會佔用資源,這是需要用到TCP自帶的心跳檢測,在做TCP Server的時候會碰到客戶端異常斷開的情況(晶片電源不穩斷電,異常重啟,訊號影響斷鏈),這是如果是select處理多連線,這時候主要是斷電重連,這時候就需要配置一個引數,就是“保活”,SO_KEEPALIVE屬性,就是TCP協議棧的預設心跳包,如果有連線則繼續,連線失敗,這是對應設定的socket會返回一個返回一個err的讀事件,這時就可以處理關閉和回收記憶體的事情了,程式碼如下:

//設定心跳檢測機制  
int on = 1;   
ret = setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, (void*)&on, sizeof(on));  
nbsp;                                                      //設定對應屬性,這裡在原始碼裡有提示,必須是秒為單位  
int keepIdle = 3;   //in seconds  
    int keepInterval = 2;   //in seconds  
    int keepCount = 3;  
    setsockopt(sock, IPPROTO_TCP, TCP_KEEPIDLE, (void *)&keepIdle, sizeof(keepIdle));  
setsockopt(sock, IPPROTO_TCP,TCP_KEEPINTVL, (void *)&keepInterval, sizeof(keepInterval));  
setsockopt(sock,IPPROTO_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCount));  

專案碰到問題更新,希望看到的各位大神多多補充

相關推薦

持續更新TCP/IP筆記

在ESP8266開發上,一定會用到TCP和UDP通訊,看官方SDK原始碼,所有的通訊都是用的lwip協議棧,這個是輕量型的TCP/IP協議棧,這裡做些對應的筆記。我用的是ESP官方的RTOS_SDK,這裡用的freeRTOS,在帶系統基礎上移植的lwip會提供三種API:對應

Pygame 筆記總結持續更新

Pygame tags:python3學習、邏輯訓練、陶冶情操 pygame 最小遊戲框架 import sys # 1、引入pygame 和sys 模組 import pygame pygame.init() # 2、初始化init()

部落格筆記整理持續更新...

Java基礎總結 Java基礎語法總結 包括win10 安裝JDK8,資料型別與變數,運算子,陣列 為什麼需要定義資料型別??? Java面向物件特性總結 封裝,繼承,多型 動態引用儲存——集合&&精確的集合定義——泛型 Java集合又稱容器,可以動態的將物件的引用儲存在容器中。(靈活可擴充

php實用小技巧持續更新

匹配 一個 png 實用 合並 如果 更新 1-1 字符串 這是本人開始做項目的時候遇到過的問題還有解決方法 1.eval函數   能把字符串轉換成可執行的php代碼,如果字符串不是可執行的php代碼的話,需要在前面加上@,屏蔽notice 2.array_merge函數

大坑持續更新......

sco () input 100% void stat 一個 sta name 挖個大坑,記下死活也調不對的題目 路過的大巨幫忙挑挑錯,感激不盡 2017.6.16 bzoj1858 1858: [Scoi2010]序列操作 Time Limit: 10 Sec

前端頁面重構技巧總結TIP持續更新...

code lock 項目 居中 經驗 ade 布局 baidu round 本文均為項目實戰經驗,要求兼容至IE8,所以以下內容均為兼容代碼,歡迎各位小夥伴批評指教。其實重構頁面是一門學問,看似簡單,卻暗藏很多學問。實際項目中頁面的重構有以下幾點最基本需求: 1.需要使用

php函數源代碼 C編寫 持續更新

字符串 itl 自動 code strcpy return div 取字符 pau strlen() 獲取字符串長度,成功則返回字符串 string 的長度;如果 string 為空,則返回 0。 #include<stdio.h> #include<s

團隊項目博客匯總持續更新

page wan mil target soft blog slist logs .html 小組名稱:王者榮耀交流協會 組長:高遠博 組員:王超 王磊 袁玥 王玉玲 任思佳

持續更新ultraedit工具使用總結

gin 自動 ultra 使用總結 mar 菜單 left style 快捷 常用設置及快捷鍵 設置Ultraedit自動換行: 永久修改:   點擊菜單欄的“高級→配置”,找到“編輯器→自動換行/制表符設置”,選擇“默認為每個文件啟用自動換行”,ok。 臨時修改

自動化運維系列之Ansible的簡介與安裝持續更新···

zabbix cti 服務 部署安裝 部署 ansible ffffff 執行 gen 自動化運維系列之Ansible的簡介與安裝 自動化運維工具簡介 由於互聯網的快速發展導致產品更新換代的速度逐漸加快,這就導致運維人員的日常工作會大大增加,如果還是按照傳統方式進行維護工

那些我看了第一段不會點'X'的前端資料持續更新

一、HTML CSS篇 用CSS變形建立圓形導航 Bootstrap 3 & 4的區別 二、JavaScript篇 js高階函式map、reduce、filter、sort JavaScript中的call、apply、bind深入

Tensorflow程式設計遇到的問題彙總持續更新

1、在搭建GAN模型時,使用了和Generator相同結構和引數的simpler,用於在固定epoch後生成樣本,便於觀察訓練效果。但是在執行的過程中出現了 ValueError: Variable generator/g_1e1_conv/w already exists, disallowe

持續更新總結經典位運算Tricks

前言 刷了幾個leetcode題,發現位運算的小trick還是挺多的 加上之前面試也被問到有關位運算的問題,這裡總結一些關於位運算的小技巧 這裡提醒一下,位運算的優先順序很低,不清楚的時候一定要加括號;尤其是&、|、^的優先順序比==等比較運算子還低,這個

前端效能優化集持續更新

前端效能優化可以說很廣泛了: 1,減少HTTP請求次數的優化: 1)使用代理請求,對於使用者頻繁的請求,客戶端先自己快取進入代理物件,代理來決定是否真正進行HTTP請求,而不是每次都觸發請求。 2)快取代理,例如分頁請求,可以將之前的請求資料快取再代理物件中,下次請求時候先過快取代理,有快取就拿快取的資

持續更新 配置csh cshrc

切換csh 從bash切換到csh。 輸入:csh 配置檔案 全域性配置檔案 /etc/csh.cshrc 個人配置檔案 ~/.cshrc或~/.tcshrc 提示符 設定一個漂亮使用的的提示符可以讓工作變得更愉快高效。 以下是一個合理的配置方案:   if

持續更新hexo next主題優化手冊

本文最新更新於: 月小水長的個人部落格 前言 開此貼的原因 前幾天部落格崩了,重新搭建了這個部落格站點。 特開此貼記錄next主題優化過程中遇到的問題,希望對大家有所幫助。 一些說明 前期相關的Hexo安裝、本地/遠端部署教程可百度在此不再贅述。 基於hexo

持續更新值得收藏的APP和網站

本文首發於個人公眾號: inspurer(月小水長) APP部分 你手機上的APP有多少? 用了那麼對APP 不知道這些App你有沒有嘗試下載過呢 下面就介紹一些小眾的APP吧!   1.Via瀏覽器     &n

圖解HTTPTCP/IP 的分層管理

       TCP/IP 協議族裡重要的一點就是分層。TCP/IP 協議族按層次分別分為以下 4 層:應用層、傳輸層、網路層和資料鏈路層。 把 TCP/IP 層次化是有好處的。比如,如果網際網路只由一個協議統籌,某個地方需要改變設計時,就必須把所有部分整

持續更新一個簡潔、易用的美賽LaTeX模板:easyMCM

若您無意閱讀下面的這番引入性介紹,想直接下載模板,請點這裡。 1 當前美賽模板通行情況的概述 美賽是許多大學生第一次接觸\(\LaTeX\)的機會,但是由於時間安排上的原因,很多人都是在賽前幾天匆匆拾起\(\LaTeX\)編譯器決定用其排版論文。花了一下午安裝編譯器,又花了一晚上琢磨命令列裡彈出來的各種莫

持續更新JS codewars題目

1.在這個kata中,您將建立一個函式,該函式獲取非負整數和字串的列表,並返回一個新的列表,其中過濾掉了字串 mycode function filter_list(l) { var arr2 =[];//arr2=new Ar