我不清楚何时必须使用bind()函数.我想它应该在我需要接收数据时使用(即recv()或recvfrom()函数)无论我是使用TCP还是UDP,但有人告诉我情况并非如此.
任何人都可以澄清一下吗?
编辑我已经阅读了答案,但实际上我不太清楚.让我们举一个例子,我有一个UDP客户端,它将数据发送到服务器然后必须得到响应.我必须在这里使用bind,对吗?
pou*_*def 18
这个答案有点啰嗦,但我认为这会有所帮助.
当我们进行计算机联网时,我们实际上只是在进行进程间通信.让我们在你自己的计算机上说你有两个想要互相交流的程序.您可以使用管道将数据从一个程序发送到另一个程序.当你说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() - 他们只需要确保将数据传输到您选择的任何端口.