0

我在复习我的 sockte 编程知识时遇到了一个疑问。

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

  1. 套接字绑定将套接字与端口相关联。
  2. 套接字绑定帮助内核识别它应该转发传入数据包的进程。

在面向连接的通信套接字建立如下

  • 在服务器端socket()-->bind()-->listen()-->accept().....
  • 客户端是socket()-->connect-->......

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

4

3 回答 3

0

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

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

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

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

于 2016-04-19T23:22:58.137 回答
-1

你总是先打开一个套接字。这是通过内核的路径。对说 TCP的connect调用发生在创建套接字之后。

查看 TCP 与 UDP 客户端。

TCP

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

UDP

s = socket(options....)
send(s, data)
于 2012-10-12T20:27:27.317 回答
-1

bind("0.0.0.0", 0)(所有接口,任何端口)如果您调用connect(...)listen(...)没有明确的bind(...).

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

于 2012-10-12T21:01:04.130 回答