Android NDK(套接字)-recvfrom() 将 sockaddr * 设置为 NULL(无法获取发送者的 IP)

发布于 2024-12-15 11:14:36 字数 726 浏览 1 评论 0原文

当我使用 Android NDK 调用 recvfrom 时,我的 sockaddr_in from 返回了 NULL。这个完全相同的代码在我的桌面环境上运行良好,但在设备上则不然。

int MyClass::ReceiveData(char *buffer, int bufferLength)
{
    int numBytes = 0;
    struct sockaddr_in from;
    socklen_t fromLength = sizeof(struct sockaddr_in);
    numBytes = recvfrom(mConnectionSocket,
                        buffer,
                        bufferLength,
                        0,
                        (struct sockaddr *)&from,
                        &fromLength);
    if (numBytes == -1)
        perror("recvfrom");

    int fromAddress = ntohl(from.sin_addr.s_addr);

    return fromAddress;
}

有人有什么想法吗?

When I call recvfrom using the Android NDK, I get NULL returned to my sockaddr_in from. This same exact code works fine on my desktop environment, but not on the device.

int MyClass::ReceiveData(char *buffer, int bufferLength)
{
    int numBytes = 0;
    struct sockaddr_in from;
    socklen_t fromLength = sizeof(struct sockaddr_in);
    numBytes = recvfrom(mConnectionSocket,
                        buffer,
                        bufferLength,
                        0,
                        (struct sockaddr *)&from,
                        &fromLength);
    if (numBytes == -1)
        perror("recvfrom");

    int fromAddress = ntohl(from.sin_addr.s_addr);

    return fromAddress;
}

Anybody have any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笑叹一世浮沉 2024-12-22 11:14:36

我的 sockaddr_in 'from' 返回了 NULL

这对于该代码是不可能的。 from 不是一个可以变为 NULL 的指针。更可能的是,您的由 from 命名的 sockaddr_in 结构正在被清零。这是由于在 TCP 套接字上使用它而导致的。如果这是 TCP,您应该在套接字上调用 getpeername() 来获取对等地址。

I get NULL returned to my sockaddr_in 'from'

That's not possible with that code. from isn't a pointer that can become NULL. More probably your sockaddr_in structure named by from is getting zeroed. Which would be caused by using this on a TCP socket. If this is TCP you should be calling getpeername() on the socket to get the peer address.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文