我正在刷新我的袜子编程知识并遇到了疑问。
首先让我解释一下我对套接字的理解。
在面向连接的通信套接字建立如下
我的问题是为什么客户端不需要绑定到套接字。在客户端的情况下,如果它发送请求,它必须得到对其套接字的响应,并且内核必须将其转发到它的进程。对于这些事情发生不需要绑定吗?如果不是内核将如何理解向谁发送响应包? 另外连接的客户端调用绑定socket。为什么需要它?
答案 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(...)
(所有接口,任何端口)都是隐含的。
即使在无连接时,所有套接字也必须绑定到本地端口,以便可以进行双向通信(即使您不打算这样做)。