哪些客户端情况需要bind()?

时间:2010-11-07 14:53:10

标签: c network-programming sockets

我正在学习C套接字编程。你什么时候在客户端使用bind()?需要什么类型的程序以及为什么?我在哪里可以找到一个例子?

7 个答案:

答案 0 :(得分:13)

在客户端,如果要使用特定的客户端端口,则只使用bind,这种情况很少见。通常在客户端上,您指定服务器计算机的IP地址和端口,操作系统将选择您将使用的端口。通常你不在乎,但在某些情况下,客户端上可能有防火墙只允许某些端口上的传出连接。在这种情况下,您需要在连接尝试起作用之前绑定到特定端口。

答案 1 :(得分:4)

一个例子是活动FTP连接的数据连接。在这种情况下,服务器从其端口20连接到PORT或EPRT命令指定的IP和端口。

答案 2 :(得分:3)

使用bind()的客户端程序的典型示例是(过时的)rlogin / rsh网络客户端系列。这些客户端旨在用于具有强信任关系的网络中 - 在某些情况下,服务器计算机信任客户端计算机以告知其正在连接的用户的用户名。这要求客户端程序从低端口(小于1024的端口)连接,因为此类端口仅限于root用户,因此(理论上)证明所使用的客户端是由系统管理员授权的

NFS协议具有类似的信任关系,类似地,客户端使用bind()从低端口号建立连接。

另一个例子是允许用户指定要连接的特定源IP地址的IRC客户端。这是为了容纳分配给他们的机器的许多IP地址的用户,每个IP地址分配有不同的“虚荣”域名。选择要连接的IP(使用bind())允许用户选择在IRC上显示的域名。

答案 3 :(得分:0)

我想你应该在UDP套接字的情况下绑定()。

答案 4 :(得分:0)

一个好的情况是在p2p的情况下,你正在与带有绑定套接字的STUN服务器进行通信,并且STUN服务器告诉你他正在从你的套接字接收消息的端口(可能与绑定套接字时指定的一个,具体取决于您的网络,更具体地说,取决于您的NAT类型)。这将使您能够了解NAT正在进行的实际端口转换,并且您将能够将此信息提供给想要连接到您的潜在对等方。 绑定套接字很有用,因为一些NAT动态地为您提供端口(在端口x上绑定两次可能不会为您提供相同的“真实”端口)。因此,您将能够直接使用绑定的套接字来侦听端口。

答案 5 :(得分:-1)

绑定功能是“关键”功能之一。它将您的套接字(服务器或客户端)与地址(ip +端口)相关联。对于Windows,您必须对WinSockets使用 bind 。有关安东尼·琼斯和吉姆·欧伦德的“微软Windows网络编程”的好书。

答案 6 :(得分:-2)

绑定可用于将名称附加到套接字。因此,假设您创建了一个使用特定TCP端口的软件,您需要绑定它,然后,您将知道它正在使用的TCP端口。