Wie eine Struktur senden sendto () verwendet
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.
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 .