【发布时间】:2012-10-28 19:30:08
【问题描述】:
我在谷歌上搜索过,找不到解决这个问题的方法:
我正在尝试在我的 Android 设备上进行一些基本的套接字编程(客户端/服务器应用程序),但我无法启动服务器应用程序。在我的本机代码中,我调用了 bind(...),我从日志中看到它返回 -1。当我检查errno时,值为97(EAFNOSUPPORT),表示“协议不支持地址族”。当我检查 sin_family 的值时,它是 AF_INET,即 IPv4。 Android NDK 不支持吗?如果不是,还有什么可能是导致此错误的原因?
Socket初始化为:
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP));
listenAddr 是一个 sockaddr_in 结构体,初始化为:
sin_family = AF_INET;
sin_port = htons(9099);
sin_addr.s_addr = INADDR_NONE;
调用绑定:
bindResult = bind(sock, (sockaddr *)listenAddr, sizeof(listenAddr))
绑定结果返回-1。对 errno 的后续调用返回 97。
【问题讨论】:
-
发布您的代码,或搜索已知好的示例并进行自己的详细比较。有几个地方你可能会犯一些微妙的错误,尤其是涉及到的一些结构的大小。
-
在 Linux 上运行此代码并遇到同样的问题 :(
标签: android sockets android-ndk