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

了解套接字编程的INADDR_ANY

郎俊雅
2023-03-14

我正在尝试对一些套接字进行编程,因此,在服务器端,我使用htall(INADDR_ANY)。就我所理解的程度而言,在我看来,这个函数会生成一个随机的IP(我是对的吗?实际上,我想将我的套接字与我的本地主机绑定。但是如果我运行这个

printf("%d",htonl(INADDR_ANY));

我得到0作为返回值。有人能解释一下吗?

共有3个答案

庾兴发
2023-03-14

若要将套接字与本地主机绑定,在调用绑定函数之前,应正确设置sockaddr_in结构的sin_addr.s_addr 字段。适当的值可以通过以下方式获得

my_sockaddress.sin_addr.s_addr = inet_addr("127.0.0.1")

my_sockaddress.sin_addr.s_addr=htonl(INADDR_LOOPBACK);
聂季同
2023-03-14

INADDR_ANY在不需要将套接字绑定到特定 IP 时使用。如果在调用 bind() 时使用此值作为地址,则套接字将接受与计算机所有 IP 的连接。

秦英发
2023-03-14

>

  • bind()ofINADDR_ANY不会"生成随机IP"。它将套接字绑定到所有可用的接口。

    对于服务器,您通常希望绑定到所有接口,而不仅仅是“localhost”。

    如果希望仅将套接字绑定到localhost,语法将是my_sockaddress.sin_addr。s_addr=inet_addr(“127.0.0.1”),然后调用bind(my_socket,(SOCKADDR*)

    碰巧的是,< code>INADDR_ANY是一个恰好等于“零”的常数:

    http://www.castaglia.org/proftpd/doc/devel-guide/src/include/inet.h.html

    # define INADDR_ANY ((unsigned long int) 0x00000000)
    ...
    # define INADDR_NONE    0xffffffff
    ...
    # define INPORT_ANY 0
    ...
    

    如果您还不熟悉它,我敦促您查看Beej的套接字编程指南:

    http://beej.us/guide/bgnet/

    由于人们仍在阅读这篇文章,另请注意:

    曼(7)叶:

    当一个进程想要接收新的数据包或连接时,它应该使用bind(2)将一个套接字绑定到一个本地接口地址。

    在这种情况下,只有一个IP套接字可以绑定到任何给定的本地(地址、端口)对。当在绑定调用中指定INADDR_ANY时,套接字将绑定到所有本地接口。

    当在未绑定的套接字上调用 listen(2) 时, 该套接字会自动绑定到一个随机的空闲端口, 本地地址设置为 INADDR_ANY。

    当在未绑定的套接字上调用connect(2)时,套接字会自动绑定到随机空闲端口或本地地址设置为INADDR_ANY的可用共享端口…

    有几个特殊地址:INADDR_LOOPBACK(127.0.0.1)总是指通过环回设备的本地主机;INADDR_ANY(0.0.0.0)表示要绑定的任何地址。。。

    另外:

    bind()-将名称绑定到套接字:

    如果(sin_addr.s_addr)字段设置为常量INADDR_ANY,如netinet/in中所定义。h、 调用方请求将套接字绑定到主机上的所有网络接口。随后,来自所有接口(与绑定名称匹配)的UDP数据包和TCP连接被路由到应用程序。当服务器向多个网络提供服务时,这一点变得很重要。通过不指定地址,服务器可以接受为其端口发出的所有UDP数据包和TCP连接请求,而不管请求到达的网络接口是什么。

  •  类似资料:
    • 问题内容: 我正在使用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地址。 在系统上,此信

    • This chapter looks at the basic techniques for network programming. It deals with host and service addressing, and then considers TCP and UDP. It shows how to build both servers and clients using the

    • 计算机网络基础 ip地址 为了使网络上的计算机能够彼此识别对方,每台计算机都需要一个IP地址以标识自己。 IPv4:32位,IPv6:64位 OSI七层参考模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 地址解析 地址解析是指将计算机的协议地址解析为物理地址,即MAC(Medium Access Control)地址,又称为媒体访问控制地址。通常,在网络上由地址解析协议(ARP)

    • 当我进行套接字编程时,我无法清楚地理解。 我的理解是 如果我使用此选项打开套接字,表示我可以在header之前创建自己的header,但最终数据以 /code>协议的格式发送。我的理解是正确的。如果错了,可以一些解释。 谢谢