java - 通过socket将asn1数据从客户端发送到服务器

标签 java c sockets asn.1

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

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>

但是在java服务器中我收到这个错误

received data: B0 41 40 A1 B4 
com.chaosinmotion.asn1.AsnFatalException: 
 >> During decoding, the encoded tag value in the byte array does not match with this object's tag number ! 
    at com.turkcelltech.jac.Sequence.decode(Sequence.java:100)
    at ServiceRequest.run(ServiceRequest.java:30)

this is the server code 
BerInputStream bin = receive(5);
            Message01 msg01 = new Message01();
            msg01.decode(bin);
            printMessage(msg01);

最佳答案

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

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

预期类似于以下字节序列(十六进制)30 03 02 01 02

关于java - 通过socket将asn1数据从客户端发送到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23598392/

相关文章:

c - pthread : destroying global static mutex

php - 套接字性能和开销

java - 我在哪里可以找到旧的 "Developer Collaboration"插件?

java - 找不到与给定名称匹配的资源 : attr 'android:keyboardNavigationCluster'

c - PostMessage 似乎不起作用?

c - 使用常量文件指针倒带和 fscanf

multithreading - 使用阻塞调用时如何退出程序

node.js - 远程服务器的socket.io主机名

java - 当简单的 Java Nio 客户端发送消息时 Netty 服务器抛出异常

java - 将 JasperReport jrxml 加载到 JFrame