Java 使用套接字将asn1数据从客户端发送到服务器

Java 使用套接字将asn1数据从客户端发送到服务器,java,c,sockets,asn.1,Java,C,Sockets,Asn.1,我在C客户机中编写了这段代码,以获取一个整数,对其进行编码并通过套接字发送 int clientNumber; printf("Enter a number :\n "); scanf("%d",&clientNumber); Message01_t *message1; message1 = calloc(1, sizeof(Message01_t)); message1->number= clientNumber; char buffer[BUFFERSIZE]; s

我在C客户机中编写了这段代码,以获取一个整数,对其进行编码并通过套接字发送

int clientNumber;
printf("Enter a number :\n  "); 
scanf("%d",&clientNumber);
Message01_t *message1;
message1 = calloc(1, sizeof(Message01_t));
message1->number= clientNumber;
char    buffer[BUFFERSIZE];
size_t  bufferLen = sizeof(buffer); 
der_encode_to_buffer(&asn_DEF_Message01, message1, buffer, bufferLen);
xer_fprint(stdout, &asn_DEF_Message01, message1);

if( send( to_server_socket, &message1, sizeof( message1 ), 0 ) != sizeof( message1) )     {
printf( "socket write failed");
 exit( -1 );
   }
一切看起来都很好,我得到了输出

Enter a number :
  2
<Message01>
    <number>2</number>
</Message01>

问题是您发送的是结构(
message1
),而不是编码的缓冲区。 将C程序的最后一部分更改为:

if( send( to_server_socket, buffer, bufferLen, 0 ) != bufferLen ) {
    printf( "socket write failed");
    exit( -1 );
}
需要以下字节序列(十六进制)
30 03 02

if( send( to_server_socket, buffer, bufferLen, 0 ) != bufferLen ) {
    printf( "socket write failed");
    exit( -1 );
}