簡體   English   中英

使用ASN.1編碼和發送數據

[英]encode and send data with ASN.1

我想使用套接字通過ASN.1將int從客戶端發送到服務器。 這是ASN定義

Message01 ::= SEQUENCE
        {
          number INTEGER  -- inital integer
        }

這是C代碼

INTEGER_t clientNumber;
    printf("Enter a number :\n  "); 
    scanf("int *",&clientNumber);
    Message01_t *message1;

    message1 = calloc(1, sizeof(Message01_t));
    message1->number = clientNumber;
      der_encode(&asn_DEF_Message01, message1, 1, 0);

我的der_encode錯誤

警告:傳遞'der_encode'的參數3使指針從整數轉換而無需轉換客戶端.c:117:錯誤:賦值類型不兼容

在示例示例ASN.1中,他們寫道

der_encode(&asn_DEF_Rect, rect,write_stream, ostream);

但是我不明白什么是write_stream。

編輯:

我試過了

static int
write_out(const void *buffer, size_t size, void *app_key) {
     FILE *out_fp = app_key;
    size_t wrote;
    wrote = send( to_server_socket, &buffer, sizeof( buffer ), 0 );

    return (wrote == size) ? 0 : -1;
}

int main ( int argc, char* argv[] )

der_encode(&asn_DEF_Message01, message1, write_out, 0);

但是我有一個錯誤

ndefined symbols for architecture x86_64:
  "_asn_DEF_Message01", referenced from:
      _main in cccwTrYO.o
  "_der_encode", referenced from:
      _main in cccwTrYO.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

哇,這份文件太糟糕了。 但是“矩形”示例中有一個線索...

/*
 * This is a custom function which writes the
 * encoded output into some FILE stream.
 */
static int
write_out(const void *buffer, size_t size, void *app_key) {
    FILE *out_fp = app_key;
    size_t wrote;

    wrote = fwrite(buffer, 1, size, out_fp);

    return (wrote == size) ? 0 : -1;
}

接着

ec = der_encode(&asn_DEF_Rectangle, rectangle, write_out, fp);

由此推論, write_stream參數應該是您編寫的回調函數,而ostream參數應該是應用程序提供的數據,該數據逐字傳遞給了回調。 這是C語言中回調的一種很常見的模式。

因此,您需要編寫一個回調函數,該函數將寫入網絡套接字(使用writesend ),將其作為write_stream提供,並將套接字描述符號作為ostream傳遞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM