这个答案有点啰嗦,但我认为它会有所帮助。
当我们进行计算机网络时,我们实际上只是在进行进程间通信。假设在您自己的计算机上,您有两个想要相互交谈的程序。您可以使用管道将数据从一个程序发送到另一个程序。当您说ls | grep pdf 时,您正在获取ls 的输出并将其输入grep。这样,ls 和 grep 两个独立的程序之间就可以进行单向通信了。
执行此操作时,需要有人跟踪每个进程的进程 ID (PID)。该 PID 是每个进程的唯一标识符,它可以帮助我们跟踪我们想要传输的数据的“源”和“目标”进程。
所以现在假设您从网络服务器获得的数据比您想要传输到浏览器的数据。嗯,这和上面的场景是一样的——两个程序之间的进程间通信,“服务器”和“浏览器”。
除了这一次,这两个程序在不同的计算机上。跨两台计算机进行进程间通信的机制称为“套接字”。
太好了。您获取一些数据,将其通过网络传输,然后另一台计算机接收它。除了那台计算机不知道如何处理这些数据。还记得我们说过我们需要一个 PID 来知道哪些进程正在通信吗?在网络中也是如此。当您的计算机收到 HTML 数据时,它如何知道将其发送到“firefox”而不是“pidgin”?
当您传输网络数据时,您指定它在特定的“端口”上传输。 80端口通常用于web,25端口用于telnet,443端口用于HTTPS等。
并且那个“端口”绑定到机器上的特定进程 ID。这就是我们有端口的原因。这就是我们使用bind() 的原因。为了告诉发送者哪个进程应该接收我们的数据。
这应该解释人们发布的答案。如果你是发送者,你并不关心传出端口是什么,所以你通常不会使用bind() 来指定那个端口。如果您是接收者,那么其他人都必须知道在哪里寻找您。所以你bind()你的程序到80端口,然后告诉大家确保在那里传输数据。
要回答您的硬件问题,是的,您可能想为您的服务器使用 bind()。但是客户端不需要使用 bind() - 他们只需要确保将数据传输到您选择的任何端口。