【问题标题】:In socket programming, why a client is not bind to an address?在套接字编程中,为什么客户端没有绑定到地址?
【发布时间】:2014-03-05 22:34:15
【问题描述】:

在套接字编程中,我看到服务器绑定到一个由 IP 和端口号组成的地址。然后步骤是听,并接受(阻塞呼叫)。我想知道为什么客户端不需要绑定它的 ip 地址和端口号。实际上,它与服务器套接字地址绑定。之后,客户端调用 connect() 调用来建立连接。稍后,客户端和服务器都可以相互交谈。服务器如何与客户端对话?客户端尚未绑定其 IP 地址和端口号。服务器如何到达客户端?

【问题讨论】:

    标签: linux sockets network-programming


    【解决方案1】:

    选择客户端端口号通常由内核完成。这是有道理的,因为只有内核知道当前正在使用哪些端口。但是,您可以免费使用specify the client port on your own,但我认为客户端程序很难确保端口是空闲的。它可能只是“尝试错误”

    选择客户端 IP 地址通常也由内核通过查询 IP 路由表来完成。您可以使用route 命令显示和修改它们。


    您已询问服务器如何知道客户端的 IP 地址。您需要了解 TCP/IP 才能回答您的问题。阅读wiki article。这应该是一个很好的起点。

    【讨论】:

    • 问题是Server如何知道要发言的客户端地址。
    • 你需要了解TCP
    • 哦,所以,你说的是数据包 - 有 src 和目标地址。由此它知道目的地。
    • 是的,这就是 TCP/IP 所做的 :)(事实上 TCP 做的更多,它确保包裹到达他们的接收者。)但是 UDP/IP 正是在做你所要求的。跨度>
    • 如果客户端IP地址通常也由内核完成,那么为什么不用于服务器端。为什么要为服务器端绑定和全部?内核也可以为服务器做同样的事情,对吗?
    【解决方案2】:

    这是因为客户端总是要连接到服务器。客户端可以称为从服务器,服务器始终是主服务器。但是服务器只有在给定这样的缓冲输入流的特定代码时才能与客户端对话。否则,即使有连接,它也无法向客户端发送任何输入。端口号基本上是存储在服务器计算机中的程序的地址。所以当客户端程序必须联系服务器端时,它需要端口号,所以服务器端不需要客户端的端口号,因为客户端程序本身想要访问服务器程序。

    【讨论】:

    • 服务器可以“与客户端对话”,因为有连接。 “特定代码,例如 BufferedReader”与它无关。除了完全错误的部分之外,这个答案是非解释性的废话。 -1
    • 服务端与客户端通信的代码与客户端与服务端通信的代码相同。在这两种情况下,都需要输出流或写入器。服务器到客户端的方向没有什么不同。不要教我什么时候思考。紧扣主题,避免个人言论。
    • 您还没有回答为什么客户端不必绑定的问题;您关于服务器无法“与客户端对话”和“无法向客户端发送任何输入”的陈述既不正确也不相关;我不会“太快”判断这些事情;并告诉我思考什么以及何时思考不是主题。您在这里唯一正确的是我对您的回答投了反对票。
    • 说客户端需要连接到服务器并不能回答为什么客户端不需要绑定的问题。时期。看看其他答案,看看真正的答案是什么样的。其余的废话都无关紧要。
    • 您的回答指出,我引用,'这是因为客户端总是必须连接到服务器'。您确实需要查看其他答案,因为您的答案表明对该主题的了解不完全。并且不要在这里发表个人评论。
    【解决方案3】:

    我想知道为什么客户端不需要绑定它的ip地址和端口号。

    因为有一个内部的 bind() 作为 connect() 的一部分,如果套接字尚未绑定,并且因为服务器不关心客户端的端口号是什么:它不需要修复比如服务器的端口号。

    其实是和服务端socket地址绑定的。

    不,它没有:它连接到服务器的地址。

    服务器如何与客户端对话?

    通过已建立的连接。

    客户端没有绑定它的IP地址和端口号。

    是的,见上文。

    服务器如何到达客户端?

    客户端到达服务器的方式相同。通过发送带有目标地址和端口的数据包。

    【讨论】:

      猜你喜欢
      • 2011-11-25
      • 2017-10-21
      • 1970-01-01
      • 1970-01-01
      • 2017-07-10
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多