Invio codice HEX con TCP socket C++

di il
1 risposte

Invio codice HEX con TCP socket C++

Salve a tutti,
sono un neofita del C e anche del C++, devo creare una connessione con un device ed ho bisogno di fare una chiamata TCP inserendo un codice HEX all'interno e spedirlo e ricevere un'altro codice HEX. Ho tentato di scrivere un codice che però non riesco a capire perché non funziona.Premetto la periferica funziona perché se invio lo stesso codice con PacketSender funziona e risponde anche in maniera corretta. Allego il codice in questione.

da terminale lancio una volta compilato il codice:

./main 192.168.2.170 26810000A7
però il messaggio credo che non sia corretto perché ho provato a fare anche uno sniffing con Wireshark tra il pacchetto lanciato con PacketSender e quello che lancio io con il mio codice in C++ ed effettivamente non trovo il codice che inserisco da linea di comando (in allegato mando lo screenshot anche del test fatto con Wireshark, a sinistra le info del pacchetto inviato con Wireshark(che funziona, infatti si può leggere verso la fine il codice inserito da terminale) e a destra quello del mio codice(dove non trovo nessun codice che gli somiglia) )
Non so come risolvere questo problema, qualcuno saprebbe darmi un'indicazione/soluzione ?
Forse dovrei convertire la stringa in hex, ma non so come farlo.

Grazie

#include <stdio.h>
#include <errno.h>
#include <string>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <cstring>
#include <unistd.h>
#include <iostream>
#include <unistd.h>

using namespace std;

// per compilare gcc connect_PE.cpp -lstdc++ -o main
int main(int argc, char *argv[])
{
    int sockfd, n;
    struct sockaddr_in servaddr;

    std::string serveraddr = argv[1];

    sockfd = socket(AF_INET, SOCK_DGRAM, 0);

    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr = inet_addr(serveraddr.c_str());
    servaddr.sin_port = htons(9761);

    connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
    cout << connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
    const std::string hex = argv[2];

    char *number = strcpy(new char[hex.length() + 1], hex.c_str());


    send(sockfd, &number, 8, 0);
    recv(sockfd, &number, 8, 0);
}

1 Risposte

  • Re: Invio codice HEX con TCP socket C++

    Li puoi chiamare number ma sono una stringa e li stai trasmettendo come caratteri di una stringa con i loro codici Ascii.
    Devi prima trasformare la stringa in valori numerici.
    Usa uno stringstream
Devi accedere o registrarti per scrivere nel forum
1 risposte