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

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

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

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

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

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

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

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

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

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

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