2 Stimmen

Wie man eine Struktur mit sendto() sendet

Ich habe eine Struktur erstellt:

struct buffer
{
    string ProjectName ;
    string ProjectID ;
}

buffer buf;
buf.ProjectID = "212";
buf.ProjectName = "MyProj";

Um nun diese Struktur mit der sendto-Methode zu senden, tippe ich die Struktur und sende sie wie folgt zurück:

char *sendbuf = (char*)&buf;
sentbytes = sendto(sock,sendbuf,strlen(sendbuf),0,(sockaddr*)&their_addr,sizeof(their_addr));

Aber während ich meine strukturellen char* die aktuellen Daten verlieren ihre Werte und beim Debuggen sehe ich, dass sendbuf einige andere Werte enthält.

Kann mir jemand sagen, wie ich die obige Struktur mit sendto senden kann?

2voto

AndersK Punkte 34870

Sie müssen die Struktur mit POD erstellen, die Zeichenfolge können Sie nicht auf diese Weise verwenden. Stattdessen müssen Sie sie wie folgt deklarieren

struct buffer
{
  char ProjectName[MAX_LENGTH_PROJECT_NAME+1];
  char ProjectID[MAX_LENGTH_PROJECT_ID+1];
};

EDIT: Klarstellung, die Zeichenfolge enthält einen Zeiger auf einen Heap zugewiesenen Speicherblock, so dass Sie nicht tatsächlich die Zeichen senden, wenn Sie versuchen, diese Struktur zu senden.

2voto

Kirill V. Lyadvinsky Punkte 92957

std::string hält seine Daten in dynamisch zugewiesenem Speicher. Sie können jede Zeichenkette und die Länge einer Zeichenkette separat senden, die Sie durch die Verwendung von std::string::c_str et std::string::size .

1voto

stefaanv Punkte 13390

Bevorzugen Sie die Verwendung von marshall/unmarshall beim Senden von Daten über das Netzwerk. Ein C++-Stil ist es, "<< / >>" für das Streaming zu einem sendbaren Puffer zu verwenden. Auf diese Weise haben Sie mehr Kontrolle darüber, was Sie senden und wie es gesendet wird (binär, Text, Xml, ...). Boost hat auch eine Serialisierungsmodul .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X