[英]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語言中回調的一種很常見的模式。
因此,您需要編寫一個回調函數,該函數將寫入網絡套接字(使用write
或send
),將其作為write_stream
提供,並將套接字描述符號作為ostream
傳遞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.