Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用sendto()发送结构_C++_Sockets_Winsock_Multicast_Sendto - Fatal编程技术网

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 ti
char*
时,实际数据正在丢失它的值,而在调试时,我看到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也有一个新的功能