Frage

Ich habe erstellt Struktur:

struct buffer
{
    string ProjectName ;
    string ProjectID ;
}

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

Nun, diese Struktur mit sendto Methode zu schicken, ich bin die strucure typecasting und es zurück, wie unten zu senden:

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

Aber während ich meine Struct bin Gießen die eigentlichen Daten ti char* ist es die Werte verlieren und beim Debuggen Ich sehe sendbuf einige andere Werte enthält.

Kann jemand lassen Sie mich wissen, wie kann ich die obige Struktur mit sendto senden.

War es hilfreich?

Lösung

Sie müssen die Struktur unter Verwendung von POD zu schaffen, ist die Zeichenfolge nicht etwas, das man in dieser Art und Weise nutzen kann. Stattdessen müssen Sie es so etwas wie

erklären,
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-Speicher-Block zugeordnet, so dass Sie nicht tatsächlich sind die Zeichen zu senden, wenn Sie versuchen, diese Struktur zu senden

Andere Tipps

std::string hält seine Daten in dynamisch zugewiesenen Speicher. Sie könnten separat jede Saite und die Länge einer Zeichenfolge senden, die Sie mithilfe von std::string::c_str und std::string::size erhalten können.

Antwort mit marshall / unmarshall, wenn Daten über das Netzwerk gesendet werden. Ein C ++ - Stil ist die Verwendung von „<>“ für das Streaming zu einem sendbar Puffer. 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 .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top