c++ - 尝试从客户端接收时出现段错误

标签 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;}
};

最佳答案

你的代码有几个大问题:

首先,ptr的赋值不正确,应该是:

void *ptr = &recv;

您应该收到有关代码类型不匹配的编译器错误。

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

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

你不能将结构转换为指针,你想传递结构的地址。

最后,也是最重要的一点,在通过网络传递的结构中使用 char* 成员是没有意义的。指针仅在单个进程中有意义,您不能在进程或机器之间传递它们。你需要serialize您的数据,然后再将其传输到网络上。

关于c++ - 尝试从客户端接收时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13542752/

相关文章:

c++ - 第一次使用 scp -r 之前我一直收到错误 "Host Key verification error"

c# - 同一台机器上UDP失败的可能性大吗?

iphone - 通过 UDP 从服务器向 iPhone 发送大量实时处理的数据

c++ 父类对象的集合

c++ - 什么是 "rvalue reference for *this"?

c++ - cc1.exe 系统错误 - 缺少 libwinpthread-1.dll - 但它不是

tcp - 奇怪的 Wireshark 行为(标记为 TCP 和 UDP 的单个数据包)

c++ - 通过访问容器的父容器来使用 sigc::mem_fun

linux - 如果没有订阅者,udp 多播是否会在网络上放置任何内容?

java - 在 Java 中发送 DNS 查询而不使用 InetAddress