xiaopang1122
Devin-zhou
2016-01-14 07:30
采纳率: 66.7%
浏览 2.8k
已采纳

C语言 socket 如何发送带指针的结构体?

发送一个带指针的结构体,我知道怎么发送? 先把结构体转换成字符串,然后发出。
但是接收的时候,怎么接收到结构体中?thanks!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • u014116643
    mifit 2016-01-14 09:28
    已采纳
        发送:
        struct f;
    char *ffff[sizeof(f)];
    memcpy(ffff, &f, sizeof(f));
    
        接收:
        struct f;
        ffff为收到的数据
        memcpy(&f, ffff, sizeof(ffff));
    
    点赞 评论
  • 91program
    91program 2016-01-14 07:48

    发指针是没有什么用处的,因为对方同样数值的指针指向的内容你无法控制。
    发送结构体,你实际想要的结构体内指针指向的内容。所以你必须将内容发到对方,然后重建结构体的指针值。

    点赞 评论
  • qq_27183003
    ysuwood 2016-01-14 07:53
     struc AA  a;
     char buf[100];//保存接收的结构体变量
     a=*((sturc AA *) buf);
    
    
    
    点赞 评论
  • xiaopang1122
    Devin-zhou 2016-01-14 10:09

    static char* merge_msg(int port, char* ipaddr, char* msg, int ipszie, int msgsize)
    {

    char p1, *p2;
    char
    buffer = malloc(sizeof(int)+ipszie+msgsize);
    if(buffer == NULL)
    {
    return NULL;
    }
    memset(buffer, 0, sizeof(int)+ipszie+msgsize);

    p1 = ip_new(ipszie);
    if(p1 == NULL)
    {
        free(buffer);
        return NULL;
    }
    
    
    p2 = msg_new(msgsize);
    if(p2 == NULL)
    {
        ip_delete(p1);
        free(buffer);
        return NULL;
    }
    
    my_itoa(port, buffer);
    my_itoa(ipszie, p1);
    my_itoa(msgsize, p2);
    
    strcat(buffer, p1);
    strcat(buffer, ipaddr);
    strcat(buffer, p2);
    strcat(buffer, msg);
    
    return buffer;
    

    }
    .......

    //发送前 把结构体转换成 字符串

    static char* getip_from_server(char* msg, int ipsize)
    {
    char* ip = ip_new(ipsize);
    if(ip == NULL)
    {
    return NULL;
    }

    int count = 1;
    if(ipsize >= 10)
    {
        count = 2;
    }
    ip = substring(msg, ip, sizeof(int)+count, ipsize);
    
    return ip;
    

    }

    static char* getmsg_from_server(char* msg, int msgsize)
    {
    char* buffer = msg_new(msgsize);
    if(buffer == NULL)
    {
    return NULL;
    }

    int count =  strlen(msg) - msgsize;
    
    buffer = substring(msg, buffer, count, msgsize);
    
    return buffer;
    

    }
    //数据收到后拆分下来。。

    ........

    不知道这样写 有没有问题?

    点赞 评论

相关推荐