何时使用套接字进行编程时使用bind()?

时间:2012-04-09 04:50:46

标签: c sockets unix network-programming

我正在编写一个简单的发送方和接收方程序,以便使用UDP进行传输,因此它是无连接的,但我在确定我的接收方程序是否需要调用bind()或服务器和/或两者时遇到问题。我的接收程序(客户端)将处于无限循环中,等待从发送方(服务器)接收数据,然后它将打印出数据。除了将地址/端口与特定套接字关联之外,我不太确定bind()的确做什么。为什么我需要调用bind()?

3 个答案:

答案 0 :(得分:1)

您需要调用bind(2),以便操作系统知道将网络数据包路由到哪个应用程序。当您使用给定协议的特定端口(例如TCP或UDP)呼叫bind时,您会问“当您在端口XXXXX上看到网络数据包时,请将其提供给我”。

例如,假设程序的两个副本正在运行,并且它们都希望在同一端口上侦听UDP数据包。如果它们都在同一端口上调用bind,那么一个将成功,一个将失败,因为操作系统可以仲裁绑定到每个端口的人。然后,在该端口上接收的任何数据包都将被提供给程序成功绑定到该端口的任何实例。

答案 1 :(得分:0)

如果要将套接字设为固定地址或/和端口,请使用bind。

答案 2 :(得分:0)

在开发网络应用程序时,您需要指定“地址和端口”进行绑定,因为如果要将其设置为Localhost,您的应用程序将无法与整个网络进行通信,仅适用于您的系统如果您使用您的网络地址进行设置,则它无法作为localhost进行通信它仅与网络通信,如果将其设置为0,则它​​可以同时用作localhost和Network。