How to Send a structure using sendto()

2019-07-16 05:44发布

I have created structure :

struct buffer
{
    string ProjectName ;
    string ProjectID ;
}

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

Now to send this structure using sendto method , I am typecasting the strucure and sending it back as below:

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

But while I am casting my Struct ti char* the actual data is loosing it's values and while debugging I see sendbuf is containing some other values.

Can some one let me know how can I send the above structure using sendto.

3条回答
Melony?
2楼-- · 2019-07-16 06:25

std::string holds its data in dynamically allocated memory. You could send separately each string and length of a string which you can get by using std::string::c_str and std::string::size.

查看更多
Luminary・发光体
3楼-- · 2019-07-16 06:32

You need to create the structure using POD, the string is not something you can use in that way. Instead you need to declare it something like

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

EDIT: clarification, the string contains a pointer to a heap allocated memory block, so you are not actually sending the characters when you try to send that structure.

查看更多
我欲成王,谁敢阻挡
4楼-- · 2019-07-16 06:36

Prefer using marshall/unmarshall when sending data over network. A C++-style is to use "<< / >>" for streaming to a sendable buffer. This way, you have more control over what you are sending and how it is sent (binary,text,xml,...). Boost also has a serialization module.

查看更多
登录 后发表回答