C++ 如何使用sendto()发送结构
我创建了以下结构:C++ 如何使用sendto()发送结构,c++,sockets,winsock,multicast,sendto,C++,Sockets,Winsock,Multicast,Sendto,我创建了以下结构: struct buffer { string ProjectName ; string ProjectID ; } buffer buf; buf.ProjectID = "212"; buf.ProjectName = "MyProj"; 现在,为了使用sendto方法发送此结构,我正在键入结构并将其发送回,如下所示: char *sendbuf = (char*)&buf; sentbytes = sendto(sock,sendbuf,str
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 tichar*
时,实际数据正在丢失它的值,而在调试时,我看到sendbuf包含一些其他值
有人能告诉我如何使用sendto发送上述结构吗。您需要使用POD创建结构,字符串不是那种可以使用的东西。相反,您需要声明如下内容
struct buffer
{
char ProjectName[MAX_LENGTH_PROJECT_NAME+1];
char ProjectID[MAX_LENGTH_PROJECT_ID+1];
};
编辑:澄清,字符串包含一个指向堆分配内存块的指针,因此在尝试发送该结构时,实际上并没有发送字符。
std::string
将其数据保存在动态分配的内存中。您可以分别发送每个字符串和字符串的长度,您可以使用std::string::c_str
和std::string::size
在通过网络发送数据时使用marshall/unmarshall。C++风格是使用“>”流式传输到可发送缓冲区。这样,您可以更好地控制发送内容和发送方式(二进制、文本、xml等)。Boost也有一个新的功能