У меня есть устройство 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 [] , и это обычный текст ..
Почему я получаю другой вывод от того, который я получаю с Геркулесом?
Как я могу воспроизвести вывод, подобный показанному в Геркулесе?
EDIT -----
На основе входной символьной строки, например
char mytest[] = 020441010C0000003131203131203131313103
Как мне достичь:
mytest2[] = {0x02,0x04,0x41,0x01, 0x0C,0x00,0x00,0x00,0x31,0x31,0x20,0x31,0x31,0x20,0x31,0x31,0x31,0x31,0x03}
Я считаю, что мне нужно разделить на 2, но я боюсь, что это не отформатирует должным образом.
Если мне здесь кто-нибудь поможет, я сам получу ответ.