下面的一段代码给我错误。每当我执行它时都会发生段错误。
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/