2012-03-13 131 views
3

我刚开始学习有关套接字编程,我遇到了一个我以前见过的概念,但对我来说很困惑。“无连接,无连接”连接

看来,UDP连接是“无连接,无连接”的连接。

“无连接”和“未连接”是多余的吗?

是否有4种类型的连接?

  1. 连接,未连接
  2. 连接,连接
  3. 无关
  4. 面向连接的,连接

和面向连接的最后,怎一个“连接,未连接“连接功能?这不是一个矛盾吗?大声笑

回答

5

事实上,没有像UDP连接那样的东西。基本上来说,UDP是一种失火和遗忘的协议,你只需要向某台机器发送数据包(不需要先建立连接),并希望另一台机器可以接收数据(如果他们甚至完成的话)。

当您建立“套接字连接”时,不会发生神奇的事情,即您和您的远程客户端之间的连线不会改变颜色或其他东西。在连接期间发生的事情双方都同意通过互联网可靠地接收和发送数据,并使用给定的协议。绝对不需要通过互联网连接任何东西来发送和接收内容,但连接允许您保证完整性和顺序(以及其他一些事情),因为两台机器都同意遵循某种方法。

我知道没有“无连接,无连接”的套接字。谁告诉你这可能只是试图强调UDP的非关联方面。

+2

+1一个伟大的答案! – 2012-03-13 14:07:24

0

是的,从技术上说,UDP不会建立连接。但是,您的代码可能会连接到用于传输数据包的本地UDP套接字。

+0

该代码有一个套接字或套接字句柄或fd。那里没有'连接'。 – EJP 2012-03-13 23:17:23

1

使用UDP套接字,您可以像使用TCP套接字一样连接到服务器。但是,您也可以直接发送数据包到服务器而不用连接,具有sendto功能。

9

从技术上讲,你可以在UDP套接字上调用connect()。在这种情况下,套接字会记住对等地址,以便可以使用send()write()系统调用而不是sendto()发送数据报。此外,它使套接字只接收来自该对等体的数据报,来自其他对等体的数据报被丢弃。

可能这就是所谓的“无连接,连接”套接字,这意味着connect()调用在UDP套接字上被调用。