我有一个CLinux设备,它从串行设备获取触发器,然后转换一些数据,并通过TCP输出到另一个设备(服务器)。
服务器需要获取以下数据:
| STX | 0x04 | 0x41 0x01 | DATA-BYTECOUNT-WORD | Option-BYTE | FIELDNUMBER-BYTE | ASCII STRING | ETX |
我只能使用第三方软件Hercules实现我想要的(下图)。 我正在用Wireshark嗅探数据,在绿色方块中如下所示。
这是我正在使用的C代码。
//var definition
int listenfd = 0, connfd = 0;
char testOutput[ ] = {0x02,0x04,0x41,0x01,
0x0C,0x00,0x00,0x00,
0x31,0x31,0x20,0x31,
0x31,0x20,0x31,0x31,
0x31,0x31,0x03};
//example
int main( int argc, char *argv[ ] )
{
int sock;
struct sockaddr_in server;
char* message[1000], server_reply[2000];
//Create socket
sock = socket( AF_INET, SOCK_STREAM, 0 );
if( sock == -1 )
{
printf( "Could not create socket" );
}
puts( "Socket created" );
server.sin_addr.s_addr = inet_addr( "192.168.0.180" );
server.sin_family = AF_INET;
server.sin_port = htons( 3490 );
if( connect( sock, ( struct sockaddr * )&server, sizeof( server ) ) < 0 )
{
perror( "Failed to connect to Server Machine.\n" );
}
puts( "Connected to Machine.\n" );
//keep communicating with server - there's a trigger for each Send before this
while( 1 )
{
if( send( sock, testOutput, 19, 0 ) < 0 )
{
puts( "Send failed." );
break;
}
}
close( sock );
return 0;
}
使用该代码,我在控制台中有一个“可视”正确的输出,尽管在服务器计算机中没有以正确的方式显示。
我尝试了不同的输出格式,一旦HEX可以作为 char [] 传输,它是纯文本。 为什么我得到的与赫拉克勒斯的输出不同?
我如何重现Hercules中显示的输出?
编辑-----
基于输入的char字符串,例如
char mytest[] = 020441010C0000003131203131203131313103
我如何实现:
mytest2[] = {0x02,0x04,0x41,0x01, 0x0C,0x00,0x00,0x00,0x31,0x31,0x20,0x31,0x31,0x20,0x31,0x31,0x31,0x31,0x03}
我相信我需要除以2,但是恐怕格式化不正确。 如果有人在这里帮助我,我自己就能得到答案。