2020年2月17日カスタムプロトコル学習

1.モジュールを送受信するメッセージをカプセル化し、カスタムプロトコルを書く、SRC / msg.cは、次のとおりです。

#include "msg.h"
の#include <unistd.h>
書式#include <string.hの>
の#include <memory.h>
書式#include <SYS / types.h>に

//計算チェックコード计算校验码函数
静的unsigned char型msg_check(MSG *メッセージ)
{
    unsigned char型S = 0。
    私はint型。
    (I ++; I <はsizeof(message->ヘッド)I = 0)するための
    {
        S + = message->ヘッド[I]。
    }
    (I ++; I <はsizeof(message->バフ)は、i = 0)するための
    {
        S + = message->バフ[I]。
    }
    戻りS。
}


//メッセージを送信する:データパラメータバフバフのデータが送信され
int型write_msg(intは数sockfd、CHAR *バフ、size_tのLEN)
{
    メッセージメッセージ;
    のmemset(&メッセージ、0、はsizeof(メッセージ));
    strcpyの(メッセージ。頭、 "iotek2012");
    のmemcpy(message.buff、BUFF、LEN);
    message.checknum msg_check =(&メッセージ);
    IF(ライト(数sockfd、&メッセージ、はsizeof(メッセージ))!=はsizeof(メッセージ)){
        リターン- 。1;
    }
    
}
//メッセージを表示します数sockfdにメッセージパラメータを受信したデータバフバフのデータが読み出され
INT read_msg(INT数sockfd、CHAR *バフ、size_tのLEN)
{
    メッセージのメッセージと、
    のmemset(&メッセージ、0を、はsizeof(メッセージ));
    size_tのサイズ。
    IF((サイズ=読み取る(数sockfd、&メッセージはsizeof(メッセージ)))<0){
        リターン-1。
    }
    ほか(サイズ== 0){場合は
        0を返します。
    }

    //コード检查校验码是否正确チェック
    unsigned char型S = msg_check(&メッセージ)。
    (もし!(S ==(unsigned char型)message.checknum)&&(のstrcmp( "iotek2012"、message.headは))){//のstrcmpは、文字列のための比較関数で
        のmemcpy(バフ、message.buff、LEN);
        リターンはsizeof(メッセージ)。
    }
    -1を返します。
}

前記、size_tのは、で定義されているタイプの符号なし整数、符号なし整数として理解<stddef.h>, <stdio.h>, <stdlib.h>, <string.h>, <time.h>和<wchar.h>コードの移植性を増加させる、標準のCヘッダファイル。

2.コンパイルテスト

 コンパイル時に使用されるコマンドラインで、-Iincludeは、ディレクトリ内の現在のディレクトリを表すヘッダファイルの検索ディレクトリの一つとして挙げられます
 

发布了5 篇原创文章 · 获赞 3 · 访问量 372

おすすめ

転載: blog.csdn.net/Xinyue_Lu/article/details/104347825