【问题标题】:send struct over tcp socket in c [duplicate]在c中通过tcp套接字发送结构[重复]
【发布时间】:2014-09-02 09:39:18
【问题描述】:

我有一个结构:

typedef     struct {
    char            *typ;
    cid_t           cid;
    unsigned short  nbytes;
    char            *data;
} req_s; 

typedef     struct {
    char            *ip;
    unsigned short  pid;
} cid_t;

我想通过 tcp 套接字发送它。那可能吗?我已经完成了:

req_s answer;
...

if( send(sock, (void*)&answer, sizeof(answer),0) < 0 ) {
    printf("send failed!\n");
}

...

recv ( socketDesc, (void*)&answer, sizeof(answer), 0) >= 0)

但如果我想阅读我的结构答案,我只会得到一些象形文字

或者有没有更好的方法将我的数据从客户端发送到服务器并返回?

【问题讨论】:

  • 你可以发送一个结构体,但是由于你有char *类型,你的字符串不会自动发送,但是字符串的地址,是的。
  • 大端与小端?
  • 不要使用结构体作为网络协议。使用网络协议作为网络协议。以八位字节设计您的协议,并为自己编写一个库来发送和接收它。或者使用现有的,例如 DML、XDR、... 使用 structs 会引入至少六个您甚至可能不知道的依赖项,并会导致类似这样的进一步问题。

标签: c sockets tcp struct


【解决方案1】:

请看这里:Passing a structure through Sockets in C。 但是,在您的情况下,您的结构中还有 inside 指针,因此您 也必须将这些指针的内容写入目标缓冲区。

【讨论】:

    【解决方案2】:

    通过网络连接发送指针通常不会起作用,因为它们指向的数据不会被复制,即使它可能会驻留在不同的内存地址。 您需要序列化您的结构以通过网络连接发送它们。

    【讨论】:

      猜你喜欢
      • 2016-01-11
      • 2018-06-26
      • 2017-04-24
      • 1970-01-01
      • 2015-01-02
      • 2013-07-22
      • 2016-06-06
      • 1970-01-01
      • 2020-12-09
      相关资源
      最近更新 更多