字節對齊在網路中需要注意的事項

以前在單片機上寫一個PPPoE的協議棧,發送的幀中總是多出一個字節,導致協商失敗。抓包發現該字節還是變化的。。。後看來走讀代碼、查看結構,忽然想起,該單片機是16位的,默認按量字節對齊,結構中出現了一個1字節的空洞,發包時把這個空洞也發出去了,後來改成按1字節對齊問題解決。這是個有意義的經歷。我們在閱讀RFC是會發現,大部分協議報頭都是按4字節對齊的,這在32位的系統上沒有問題。我們似乎不用在乎該細節。可是我們未必一輩子按4字節對齊吧,現在64位的硬體滿大街都是了,以前我反彙編多媒體軟件時發現很

段位、字節序在協議棧上的處理

如果你打算在小端字節序的機器上編寫協議棧,你就需要注意字節序的問題了。昨天在寫IP報頭處理的時候遇到了這個問題。x86是小端字節序,網絡是大端字節序。IP報頭前4位是版本號,後4位是報頭長度,那麼就是version = 0x4(IPv4),length = 0x5(報頭長20字節),網路上發過來的就是0x45,如果我們定義一個結構stA來抓取:strruct stA{    unsigned char b4Version : 4;    unsigned char b4HeadLen : 4;}

“該磁碟處於離線狀態,因為它與另一個聯機磁碟發生簽名衝突”的解決方案

        組雙硬碟時有時會遇到“該磁碟處於離線狀態,因為它與另一個聯機磁碟發生簽名衝突”的提示。右擊磁碟只有屬性一項,無法對其操作,其解決方案其實很簡單:右擊離線,然後再點聯機即可。        究其原因,應該是兩塊硬碟同時使用了相同的盤符所致,系統自動將其離線。當你右擊離線再點連機,系統會重新分配盤符給這塊硬碟,於是問題解決。如果是塊沒有分區的新硬碟,應無此問題。        轉自:貝奇動漫

推薦一款高效Cpp解析xml工具--RapidXml

解析效率比Xerces DOM 快50-100倍,tinyxml快30-60 ,作者自己牛逼哄哄的說這是他所知道的最快的xml解析庫了~~作者介紹說:" The table below compares speed of RapidXml to some other parsers, and to strlen() function executed on the same data. On a modern CPU (as of 2007), you can expect parsing th

設計模式(3) –建造者模式(Builder)

        建造者模式,也屬於建立型模式。        建造者顧名思義就是一個產品(建築)實現的經手人,他們經過一系列統一的操作去完成一個作品,完成一個什麼樣的產品和他的建造者密不可分。打個比方現在老李家現在有一塊地可以用於建築用地,可以用來蓋個超市也可以用來建造一個別墅,老李的兩個兒子都是建築師,於是他叫來了兩個兒子讓他們各自設計一套從打地基到裝修的完整的房子建造方案讓他看看想採用誰的。       老李的兒子設計出的產品:             代碼錶現如下:class

一.宏定義(1)

1.     關於宏    宏在c/c++ 中是個很常用的玩意兒,C語言中如何使用宏C(和C++)中的宏屬於編譯器預先處理的範疇,屬於編譯期概念(而非運行期概念) 函數調用在編譯後程式運行時進行,並且分配記憶體。宏替換在編譯前進行,不分配記憶體, 宏展開不佔已耗用時間,只佔編譯時間,函數調用占已耗用時間(分配記憶體、保留現場、值傳遞、傳回值)舉個例子來說現在我們有需求需要經常用到一年的秒秒數的這個常數做計算。代碼如下: #define YEAR_SECONDS365*24*60*60 int _

設計模式(4) –原型模式(Prototype)

        原型模式屬於我們要介紹的建立型模式的最後一種。火影中,鳴人的絕招之一就是影分身之術,複製出大量的自己,在某個程度上我們也可以看做是原型模式,因為影子分身也是單獨存在的,只是比較脆弱一點。。原型模式相對比較容易理解,即為已經存在的類新增一個複製的介面,所謂的複製就是產生一個與自身無關、單獨存在的個體。在c++ 中我們通常用拷貝建構函式來實現這個原型模式,因此我們有必要先理解何為拷貝建構函式以及淺拷貝、深拷貝(下一篇介紹)。        Prototype

一.宏定義(2) –# 、#@ 和## 操作等

2        # 、#@ 和##  操作# :將宏參數字串化(只在有參數的時候用到)如: #define PRINTF_OP(x)   printf(#x"is %d\n", (x) );Code:       int i=10;       int j=2;          PRINTF_OP(20);       PRINTF_OP(i/j);那麼將輸出: ## :將## 前後的串連兩個字串(可以不是參數)定義為一個標識符,可用於簡化一些操作,比如防止命名衝突之類的。 #define

調用內聯函數之問題

一個類的成員函數調用另一個類的公有成員函數應該沒問題,見如下代碼: //CMDTREE_RETCODE CCmdTree::Insert(const CString * const m_postrCMD, const VOS_VOID * const pfCmdProc){ ... //產生一個新節點 CCmdTreeNode * poCmdTreeNode = new CCmdTreeNode; ...

拷貝建構函式(淺拷貝 深拷貝)

名詞解釋:          位拷貝:位拷貝拷貝的是地址          值拷貝:拷貝的是內容使用位拷貝在一些不涉及指標變化的簡單操作中可以滿足我們的需求,因為他們只需要簡單的將成員變數的值簡單的複製,這種我們也稱之為:淺拷貝。假設我們現在需要用在新開闢一個空間,那麼就不能簡單的用淺拷貝來得到我們需要的結果,這種需求我們稱之為:深拷貝。這樣我們就需要自己寫拷貝建構函式來實現深拷貝了。      淺拷貝     

視窗:網路-檔案發送/接收函數

C++基於MFC寫的一組檔案發送/接收函數,很簡單。這函數不是我寫的~~~發送檔案函數void SendFile(void)...{    const UINT PORT = 4000;    AfxSocketInit(NULL);    CSocket sock;    sock.Create(PORT);    sock.Listen();    CSocket sockRecv;    sock.Accept(sockRecv);        CFile file;    file.O

寫命令列程式的一點技巧

最近在寫命令列程式,類似windows下的netsh。總結了點技巧。 想做一個不返回的命令列程式,等待用戶輸入,就得用死循環。一般的處理方法如下:while(1){    ...    cCh = _getch();    _putch(cCh);   

WTL AppWizard 2.0 RC1

WTL應用程式嚮導更新至2.0RC1主要功能:    以嚮導的方式提供WTL項目產生,支援產生平台包括VS60/VS2002/VS2003/VS2005/VS2008。    目前提供中、英文兩種介面,可以產生WTL中/英資源項目。更新:    由於iup未提供wizard控制項,故使用iup來類比,上一版的iup.wizard實現為多個iup.dialog切換,效果總是差強人意。在RC1中已經改成使用iup.zbox實現多個頁面切換,效果與使用WTL編寫的native控制項完全相同。   

設計模式(5) 結構型模式總覽

1  橋接模式(Bridge)模式核心思想: 將介面抽象化(介面類)然後通過繼承將用戶端(操作類)隔離開來達到解耦的作用。應用情境: A sir 和Bsir 兩個人分別負責一個系統的兩個模組,A需要調用B的實現操作,後期測試發現B sir的模組效率太低,於是B 需要最佳化改寫自己的代碼,如果這是A 和B沒有事先定義好介面方式,那麼很有可能B進行最佳化代碼後A 也需要做相應的修改。這個時候橋接模式就派上用場了,需要A

【專題】路由器軟件的設計與實現(一)(未完待續)

以前在公司做了多年的路由器。。。現在自己沒事兒,也寫一個玩,主要是複習一下。 一個建一個路由器,至少要能實現報文的三層轉發。按照控制、轉發平面分離的思想,模塊大致如下:  +--------------------------+|                                  ||    路由協議   (RPAs) |          +--------+|                                  |          |            |

一.宏定義(3) –查看宏展開

1.     怎麼查看宏展開         從一個宏定義開始說起#define Mul( a,b) a * b      乍看之下這個宏定義並沒有什麼問題,但是當你採用如下用法的時候就會出現問題了int main(char * argv[] ,intargc){ intnmul=Mul(2+3, 4+5); printf("mul=[%d]\n",nmul); return 0;}運行後輸出:      可以看到結果並不是我們預期的 5*9 =45,

占空比、電平觸發、邊沿觸發

 來自百度 占空比的圖例    占空比(Duty Cycle)在電信領域中有如下含義:   在一串理想的脈衝序列中(如方波),正脈衝的期間與脈衝總周期的比值。  例如:脈衝寬度1μs,訊號周期4μs的脈衝序列占空比為0.25。   在一段連續工作時間內脈衝佔用的時間與總時間的比值。   在CVSD調製(continuously variable slope delta modulation)中,位元“1”的平均比例(未完成)。   在周期型的現象中,現象發生的時間與總時間的比。

設計模式(1) –單例模式(Singleton)

首先,單例模式是對象的建立模式之一,單例模式的三個特點:1,該類只有一個執行個體2,該類自行建立該執行個體(在該類內部建立自身的執行個體對象)3,向整個系統公開這個執行個體介面        有人可能會問這樣的方式可以用在哪裡,哪裡比較適合使用?舉個例子,倚天劍只有一把,可能在張無忌手中 可能在楊逍手中當然也有可能在趙敏手中,如果我們將倚天劍設定為一個普通的類,那麼就可能出現一個倚天劍重複執行個體化的情況,金庸的世界可不是咱這,山寨貨那麼多。。。

代碼走查該走查什麼

代碼走查在很多公司都是一個必要的過程,但是很多時候卻時候一個形同虛設的過程,通常檢查的同事只要保證你的代碼能夠編譯通過,不出現問題就pass了。到底代碼走查有沒有一定的規範性呢?如果公司是嚴格按照開發流程來的話,那麼代碼走查可能也會是中紅色,它標示著代碼走查可以使得設計人員和開發人員之間識別出錯誤,防止出現設計一套方案開發又開發自己又寫出了另一套方案的問題發生。這在一些業務性比較強的系統中代碼走查尤為重要,如果開發人員因為業務不熟導致理解錯誤那麼出現的問題也能就會不可預估了,這個時候的代碼走查就

設計模式(2) –原廠模式(Factory)

       個人而言我認為原廠模式是應用最為廣泛的一種模式了,原廠模式也屬於建立型模式,一般來說分為:簡單原廠模式、抽象工廠(AbstactFactory)模式。這個模式有什麼好處呢?我們可以通過下面這個例子來探討:        假設工廠生產一些了很多種產品,並且需要為這些產品設計很多的封裝,每個產品用來展示用各自的封裝設計展示給客戶看。於是幾年前的我可能就會寫出如下的代碼:      class CProductAShow {public:void AShow(){cout<<

總頁數: 61357 1 .... 19403 19404 19405 19406 19407 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.