|
问题是这样的:
我在向服务器发送的报文是加密后的密文,内容如:“151111?u?9翈艪u 菡穏鮅h矾ゥ?堪}2|4”,正如看到的,密文中有一些字符被解析为双字节字符,这样在读取的时候遇到双字节字符处就会报错(字符转换错误):
脚本为WinSock协议,基本实现如下:
char *SendBuf = "151112457789990909461794619847817412345";
cbEncryp(SendBuf,39,b_k); //调用加密函数进行加密
//以上报文加密结果:151111?u?9翈艪u 菡穏鮅h矾ゥ?堪}2|4
lrs_set_send_buffer("socket0",SendBuf,39);
lrs_send("socket0","buf2",LrsLastArg);
以上脚本执行到lrs_send处便会报出错误:
Unable to translate buffer to socket2. Error code : 9013.
如果对加密后的报文用如下两种方式打印:
for(i=0;i<39;i++)
lr_output_message("要发送的报文:%c",SendBuf);//打印字符,对应结果1
for(i=0;i<39;i++)
lr_output_message("要发送的报文:%d",SendBuf);//打印数值,对应结果2
结果1:(前20个) 结果2:(前20个)
Action.c(80): 要发送的报文: Action.c(80): 要发送的报文: 2
Action.c(80): 要发送的报文: Action.c(80): 要发送的报文: 0
Action.c(80): 要发送的报文: Action.c(80): 要发送的报文: 0
Action.c(80): 要发送的报文: Action.c(80): 要发送的报文: 0
Action.c(80): 要发送的报文: ' Action.c(80): 要发送的报文: 39
Action.c(80): 要发送的报文: 1 Action.c(80): 要发送的报文: 49
Action.c(80): 要发送的报文: 5 Action.c(80): 要发送的报文: 53
Action.c(80): 要发送的报文: 1 Action.c(80): 要发送的报文: 49
Action.c(80): 要发送的报文: 1 Action.c(80): 要发送的报文: 49
Action.c(80): 要发送的报文: 1 Action.c(80): 要发送的报文: 49
Action.c(80): 要发送的报文: 1 Action.c(80): 要发送的报文: 49
Action.c(80): 要发送的报文: ? Action.c(80): 要发送的报文: -120
Action.c(80): 要发送的报文: Action.c(80): 要发送的报文: 22
Action.c(80): 要发送的报文: u Action.c(80): 要发送的报文: 117
Action.c(80): 要发送的报文: ? Action.c(80): 要发送的报文: -31
Action.c(80): 要发送的报文: Action.c(80): 要发送的报文: 11
Action.c(80): 要发送的报文: 9 Action.c(80): 要发送的报文: 57
Action.c(80): 要发送的报文: ? Action.c(80): 要发送的报文: -63
Action.c(80): 要发送的报文: ? Action.c(80): 要发送的报文: -114
Action.c(80): 要发送的报文: ? Action.c(80): 要发送的报文: -58
Action.c(80): 要发送的报文: @ Action.c(80): 要发送的报文: 64
如果将对应为负值的字符单个发送也会报出上述错误。 |
|