我创建了结构:
struct buffer
{
string ProjectName ;
string ProjectID ;
}
buffer buf;
buf.ProjectID = "212";
buf.ProjectName = "MyProj";
现在使用sendto方法发送这个结构,我将结构化并发送回来,如下所示:
char *sendbuf = (char*)&buf;
sentbytes = sendto(sock,sendbuf,strlen(sendbuf),0,(sockaddr*)&their_addr,sizeof(their_addr));
但是当我正在构建我的Struct ti char*
时,实际数据正在丢失它的值,而在调试时我看到sendbuf包含一些其他值。
有人可以告诉我如何使用sendto发送上述结构。
答案 0 :(得分:2)
您需要使用POD创建结构,字符串不是您可以使用的方式。相反,你需要声明它像
struct buffer
{
char ProjectName[MAX_LENGTH_PROJECT_NAME+1];
char ProjectID[MAX_LENGTH_PROJECT_ID+1];
};
编辑:澄清,该字符串包含指向堆分配内存块的指针,因此当您尝试发送该结构时,实际上并没有发送字符。
答案 1 :(得分:2)
std::string
将其数据保存在动态分配的内存中。您可以使用std::string::c_str
和std::string::size
分别发送每个字符串和字符串的长度。
答案 2 :(得分:1)
首选通过网络发送数据时使用marshall / unmarshall。 C ++风格是使用“<<< />>”用于流式传输到可发送缓冲区。这样,您可以更好地控制发送的内容及其发送方式(二进制文本,文本,xml,...)。 Boost还有serialization module。