尝试从客户端接收时出现分段错误

时间:2012-11-24 15:47:10

标签: c++ udp

下面这段代码给了我错误。每当我执行它时都会发生分段错误。

bool handshake() {
    node recv;
    void *ptr = recv;
    recverror = recvfrom(sock,(void*) recv, sizeof((void *) recv), 0, (struct sockaddr*)&from, &len);
    cout << recv.data; 
    return true;
}

这是节点的结构:

struct node {
    char *data;
    int size_data;
    int dest_port;
    int src_port;
    int flag;
    double checksum;
    int seq;
    int ack;
    int windowsize;
    node* next;
    node() {next = NULL;}
};

2 个答案:

答案 0 :(得分:2)

您的代码存在几个大问题:

首先,ptr的分配不正确,应该是:

void *ptr = &recv;

您应该从代码中获得有关类型不匹配的编译器错误。

接下来,您对recvfrom的参数是错误的:

recverror = recvfrom(sock, ptr, sizeof(recv), 0, (struct sockaddr*)&from, &len);

您无法将结构转换为指针,您希望传递结构的地址。

最后,最重要的是,在通过网络传递的结构中拥有char*成员是没有意义的。指针只在单个进程中有意义,您不能在进程或机器之间传递它们。在将数据放到网上之前,您需要serialize数据。

答案 1 :(得分:0)

void *ptr = recv错了。取而代之的是void *ptr = &recv