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);
}