为什么客户端在面向连接的通信中进行套接字绑定而不是连接较少的通信

时间:2012-10-12 20:11:41

标签: sockets tcp network-programming udp

我正在刷新我的袜子编程知识并遇到了疑问。

首先让我解释一下我对套接字的理解。

  1. 套接字绑定将套接字与端口关联。
  2. 套接字绑定有助于内核识别应该转发传入数据包的进程。
  3. 在面向连接的通信套接字建立如下

    • 在服务器端     插座() - >绑定() - >听() - >接受().....
    • 客户端是     插座() - >连接 - > ......

    我的问题是为什么客户端不需要绑定到套接字。在客户端的情况下,如果它发送请求,它必须得到对其套接字的响应,并且内核必须将其转发到它的进程。对于这些事情发生不需要绑定吗?如果不是内核将如何理解向谁发送响应包? 另外连接的客户端调用绑定socket。为什么需要它?

3 个答案:

答案 0 :(得分:0)

  

我的问题是为什么客户端不需要绑定到套接字。

因为当你调用connect()时内核会自动绑定,如果你没有自己绑定套接字。

  

还在无连接客户端调用绑定套接字。为什么需要这里?

因为套接字没有绑定到IP地址:端口,所以它不能发送或接收任何东西。它没有通往外界的道路。

答案 1 :(得分:-1)

您总是先打开一个套接字。这是通过内核的路径。在发出套接字后发生connect调用TCP。

查看TCP与UDP客户端。

TCP

s  = socket(options....)
connect(s)
send(s, data)

UDP

s = socket(options....)
send(s, data)

答案 2 :(得分:-1)

如果您在没有明确bind("0.0.0.0", 0)的情况下致电connect(...)listen(...),则

bind(...)(所有接口,任何端口)都是隐含的。

即使在无连接时,所有套接字也必须绑定到本地端口,以便可以进行双向通信(即使您不打算这样做)。