我想使用socket从客户端向使用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使得指针来自整数 没有cast client.c:117:错误:赋值中的不兼容类型
在示例example 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
答案 0 :(得分:1)
/*
* 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
提供,并将套接字描述符号作为{ {1}}。