gpt4 book ai didi

c - Unix 套接字 : when to use bind() function?

转载 作者:太空狗 更新时间:2023-10-29 16:45:46 25 4
gpt4 key购买 nike

我不清楚何时必须使用 bind() 函数。我想无论我使用的是 TCP 还是 UDP,只要我需要接收数据(即 recv() 或 recvfrom() 函数)就应该使用它,但有人告诉我情况并非如此。

谁能解释一下?

编辑 我已经阅读了答案,但实际上我不是很清楚。让我们举一个例子,我有一个 UDP 客户端,它将数据发送到服务器,然后必须得到响应。我必须在这里使用绑定(bind),对吧?

最佳答案

这个答案有点啰嗦,但我认为它会有所帮助。

当我们进行计算机网络时,我们实际上只是在进行进程间通信。假设在您自己的计算机上有两个程序想要相互交谈。您可以使用管道将数据从一个程序发送到另一个程序。当你说 ls | grep pdf 您正在获取 ls 的输出并将其输入 grep。这样,您就可以在两个独立的程序 lsgrep 之间进行单向通信。

执行此操作时,需要有人跟踪每个进程的进程 ID (PID)。 PID 是每个进程的唯一标识符,它可以帮助我们跟踪我们要传输的数据的“源”和“目标”进程。

那么现在假设您有来自网络服务器的数据,而不是您想要传输到浏览器的数据。好吧,这与上面的场景相同 - 两个程序(“服务器”和“浏览器”)之间的进程间通信。

除了这次这两个程序在不同的计算机上。跨两台计算机进行进程间通信的机制称为“套接字”。

太棒了。你获取一些数据,将其发送到网络上,另一台计算机接收到它。除了那台计算机不知道如何处理这些数据。还记得我们说过我们需要一个 PID 来知道哪些进程正在通信吗?在网络中也是如此。当您的计算机接收到 HTML 数据时,它如何知道将其发送到“firefox”而不是“pidgin”?

当您传输网络数据时,您指定它在特定的“端口”上运行。 80端口通常用于web,25端口用于telnet,443端口用于HTTPS等。

并且该“端口”绑定(bind)到机器上的特定进程 ID。这就是为什么我们有港口。这就是我们使用 bind() 的原因。以便告诉发送方哪个进程应该接收我们的数据。

这应该可以解释人们发布的答案。如果你是发送者,你不关心传出端口是什么,所以你通常不使用 bind() 来指定那个端口。如果您是接收者,那么其他人都必须知道到哪里去找您。所以你 bind() 你的程序到端口 80,然后告诉每个人确保在那里传输数据。

要回答您的硬件问题,是的,您可能想为您的服务器使用 bind()。但是客户端不需要使用 bind() - 他们只需要确保将数据传输到您选择的任何端口即可。

关于c - Unix 套接字 : when to use bind() function?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5187395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com