C 中发送、接收和 NULL 指针的问题
Problem with send, recv and NULL pointer in C
我的代码有一个我完全不明白的问题。这是来自服务器的代码:
usr = uslist_return(&users,i);
if(usr != NULL)
{
send(client,usr,sizeof(usr),0);
//Some extra code
}
else
{
utmp.userid = -1;
send(client,&utmp,sizeof(utmp),0);
}
这是来自客户端的代码:
recv(sock,tmp,sizeof(tmp),0);
if(tmp->userid > 0)
{
//Some Code
}
else
{
//Some other code
}
这里的问题是,虽然我检查 send() 没有发送 NULL 指针,但 send() 发送的指针最终为 NULL。也许它来自 recv()。我一点也不知道。
忽略 uslist_return(...)。它只是一个 returns 指针的函数。并且 utmp 与 usr 是同一类型(但不是指针)。
编辑:服务器在 if 括号中发送一个指针,在 else 括号中发送一个结构。当服务器发送指针 usr 并且客户端获取它并将其保存在指针 tmp (相同类型的指针)中时,就会出现问题。由于这个原因,我还没有检查其他情况。
编辑 2:感谢 Martin James 的评论。看起来 recv() returns -1。 Perror 显示错误是 Bad Address。我不知道这是什么
您似乎混淆了 count 个用户,例如 27 个,size 变量 [=10] =],比方说,8 个字节。 send()
参数 len
是您发送的字节数。如果每条记录大小统一则为count * sizeof(record),否则需要对每条记录的大小求和。
此外,正如您提到的那样,发送指针通常没有意义,因为服务器和客户端使用不同的地址空间。
检查 send()
和 recv()
的 return 值。
我的代码有一个我完全不明白的问题。这是来自服务器的代码:
usr = uslist_return(&users,i);
if(usr != NULL)
{
send(client,usr,sizeof(usr),0);
//Some extra code
}
else
{
utmp.userid = -1;
send(client,&utmp,sizeof(utmp),0);
}
这是来自客户端的代码:
recv(sock,tmp,sizeof(tmp),0);
if(tmp->userid > 0)
{
//Some Code
}
else
{
//Some other code
}
这里的问题是,虽然我检查 send() 没有发送 NULL 指针,但 send() 发送的指针最终为 NULL。也许它来自 recv()。我一点也不知道。
忽略 uslist_return(...)。它只是一个 returns 指针的函数。并且 utmp 与 usr 是同一类型(但不是指针)。
编辑:服务器在 if 括号中发送一个指针,在 else 括号中发送一个结构。当服务器发送指针 usr 并且客户端获取它并将其保存在指针 tmp (相同类型的指针)中时,就会出现问题。由于这个原因,我还没有检查其他情况。
编辑 2:感谢 Martin James 的评论。看起来 recv() returns -1。 Perror 显示错误是 Bad Address。我不知道这是什么
您似乎混淆了 count 个用户,例如 27 个,size 变量 [=10] =],比方说,8 个字节。 send()
参数 len
是您发送的字节数。如果每条记录大小统一则为count * sizeof(record),否则需要对每条记录的大小求和。
此外,正如您提到的那样,发送指针通常没有意义,因为服务器和客户端使用不同的地址空间。
检查 send()
和 recv()
的 return 值。