代码之家  ›  专栏  ›  技术社区  ›  Simsons

如何使用sendto()发送结构

  •  2
  • Simsons  · 技术社区  · 14 年前

    struct buffer
    {
        string ProjectName ;
        string ProjectID ;
    }
    
    buffer buf;
    buf.ProjectID = "212";
    buf.ProjectName = "MyProj";
    

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

    但是当我在铸造我的结构时 char* 实际数据正在丢失它的值,在调试时我看到sendbuf包含一些其他值。

    3 回复  |  直到 11 年前
        1
  •  2
  •   AndersK    14 年前

    您需要使用POD创建结构,字符串不是您可以用这种方式使用的东西。相反,你需要声明

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

    EDIT:澄清一下,这个字符串包含一个指向堆分配内存块的指针,所以当您试图发送这个结构时,实际上并没有发送字符。

        2
  •  2
  •   Kirill V. Lyadvinsky    14 年前

    std::string 将其数据保存在动态分配的内存中。您可以分别发送每个字符串和字符串的长度,您可以使用 std::string::c_str std::string::size .

        3
  •  1
  •   stefaanv    14 年前