从客户端发送ASN1数据到服务器与插座 [英] Send asn1 data from client to server with socket

查看:358
本文介绍了从客户端发送ASN1数据到服务器与插座的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在C客户端写了这个code来获得一个int数,连接code,并通过socket发送

  INT clientNumber;
的printf(请输入一个数字:\\ n);
scanf函数(%d个,&安培; clientNumber);
Message01_t * MESSAGE1;
MESSAGE1 =释放calloc(1,sizeof的(Message01_t));
message1->数= clientNumber;
字符缓冲区[BUFFERSIZE]
为size_t缓冲区长度= sizeof的(缓冲);
der_en code_to_buffer(安培; asn_DEF_Message01,MESSAGE1,缓冲区,缓冲区长度);
xer_fprint(标准输出,和放大器; asn_DEF_Message01,MESSAGE1);如果(发送(to_server_socket,&安培;!MESSAGE1,sizeof的(MESSAGE1),0)= sizeof的(MESSAGE1)){
的printf(套接字写入失败);
 出口(-1);
   }

所有看起来很好,我得到了输出

 输入一个数字:
  2
< Message01>
    &所述;数大于2&下; /数>
< / Message01>

但在Java服务器我得到这个错误

 接收数据:B0 41 40 A1 B4
com.chaosinmotion.asn1.AsnFatalException:
 >>在解码过程中,EN codeD标签字节数组中值不匹配与该对象的标签号!
    在com.turkcelltech.jac.Sequence.de code(Sequence.java:100)
    在ServiceRequest.run(ServiceRequest.java:30)这是服务器code
BerInputStream斌=接收(5);
            Message01 msg01 =新Message01();
            msg01.de code(箱);
            printMessage(msg01);


解决方案

的问题是,您发送的结构( MESSAGE1 ),而不是EN codeD缓冲。
C程序的最后部分更改为:

 如果(发送(to_server_socket,缓冲区,缓冲区长度,0)!=缓冲区长度){
    的printf(套接字写入失败);
    出口(-1);
}

期待类似下面的字节(六) 30 03 02 01 02

序列

I wrote this code in the C client to get an int number , encode it and send it through socket

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 );
   }

All look fine , I got for output

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

But in the java server I get this error

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);

解决方案

The problem is that you sent the structure (message1) instead of the encoded buffer. Change the last part of the C program to:

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

Expect something like a sequence of the following bytes (hexa) 30 03 02 01 02

这篇关于从客户端发送ASN1数据到服务器与插座的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆