rec NSIZE能接受到大小,不过buf中的值确是"?\0"开头 急
byte buf[4096];
int nSize=0;
nSize=recv(m_AcceptSocket,(char FAR*)buf,4096,0);
NSIZE能接受到大小,不过buf中的值确是"?\0"开头的信息(接收来自RTU设备发过来的数据)
如果用自己写的nSize=send(m_Socket,buf,nLen,0);客户端程序又能获取到实际数据
只有接受RTU设备的数据才有问题,但是大小没有问题,为什么呢?
[解决办法]
这和十六进制有什么关系呢?十六进制或十进制或八进制只是数据的表现方式,值并不变。
还是说将数据转换成十六进制格式的字符串(类似0E 20 30 40 50这样的数据)以后再发送?
[解决办法]
"就是不能接受发过来的数据是十六进制的,"
接收和发送最好是匹配
你以字符串发就以字符串接
你以十六进制字符发 就应该以十六进制字符去接
试想 如果你发一个不可见字符过去(byte bt[0]=0x01),你又以字符串来显示的话 你会显示什么?
[解决办法]
recv返回的字节数一致就行了,干嘛非要strlen一下呢。strlen遇到0x00就认为字符串结束了。
[解决办法]
从网络过来的数字最好用ntohs或者ntohl转换下,送过去也要,问题是你缓冲区收到的不是字符串是数字,你用strlen就不对了,nsize是你实际收到到的数据长度,而strlen处理是\0结尾的字符串!
[解决办法]
"?\0"对应的HEX应该是0x3f00,如果这个是你发过来就对了!