当前位置: 首页 > 知识库问答 >
问题:

Errno 97与Android NDK套接字编程

顾英发
2023-03-14

我搜遍了谷歌,也找不到这个问题的解决方案:

我正在尝试在我的Android设备上进行一些基本的套接字编程(客户端/服务器应用程序),但我没有启动服务器应用程序。在我的本机代码中,我调用了bind(…),我从日志中看到它返回-1。当我检查errno时,值是97(EAFNOSUPPORT),表示“协议不支持地址系列”。当我检查sin_family的值时,它是AF_INET的,即IPv4。AndroidNDK不支持这一点吗?如果不是,还有什么原因会导致此错误?

套接字初始化为:

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。

共有1个答案

慕金林
2023-03-14

使用INADDR_ANY(或特定接口的地址)而不是INADDR_NONE。

INADDR_NONE是一个无符号常量,其位模式与有符号值-1相同,作为某些调用的错误指示返回。

 类似资料:
  • 套接字编程和Http编程有什么区别?有人能帮忙吗?

  • 问题内容: 我试图理解SocketChannels和NIO。我知道如何使用常规套接字,以及如何制作一个简单的每客户端线程服务器(使用常规阻塞套接字)。 所以我的问题是: 什么是SocketChannel? 当使用SocketChannel而不是Socket时,我还能得到什么呢? 通道和缓冲区之间是什么关系? 什么是选择器? 文档中的第一句话是。那是什么意思? 我也阅读了本文档,但是不知何故…… 问

  • 问题内容: 我正在使用Java套接字构建一个简单的客户端/服务器应用程序,并尝试使用ObjectOutputStream等。 我一直在这个URL http://java.sun.com/developer/technicalArticles/ALT/sockets上关注该教程,当它谈到通过套接字传输对象时,它从一半开始。 请参阅我为客户端提供的代码http://pastebin.com/m37e4

  • 套接字编程在本系列教程中地位并不是很突出,但是我们观察网络应用,绝大多数都是基于Socket来做的,哪怕是绝大多数的木马程序也是如此。官方关于socket编程的文档地址为https://docs.python.org/2/library/socket.html,我承认我看起来都很费劲。 套接字为BSD UNIX系统核心的一部分,而且他们也被许多其他类似UNIX的操作系统包括Linux所采纳。许多非

  • 你好,我想问一下使用这个有什么不同: 谢谢你的回答

  • 什么是套接字? Socket是一种Berkeley UNIX机制,用于在不同进程之间创建虚拟双工连接。 随后将其移植到每个已知的OS上,使得能够跨越在不同OS软件上运行的地理位置的系统之间进行通信。 如果不是套接字,系统之间的大多数网络通信永远不会发生。 仔细看看; 网络上的典型计算机系统根据其上运行的各种应用程序接收和发送信息。 此信息被路由到系统,因为为其指定了唯一的IP地址。 在系统上,此信