【发布时间】:2012-03-13 10:27:31
【问题描述】:
我刚开始学习套接字编程,遇到了一个我以前见过但让我很困惑的概念。
似乎 UDP 连接是“无连接、未连接”的连接。
“无连接”和“未连接”不是多余的吗?
那么有 4 种类型的连接吗?
即
- 无连接,未连接
- 无连接,已连接
- 面向连接的未连接
- 面向连接,连接
最后,“无连接、未连接”的连接如何发挥作用?这不是矛盾吗?哈哈
【问题讨论】:
标签: sockets networking tcp udp client-server
我刚开始学习套接字编程,遇到了一个我以前见过但让我很困惑的概念。
似乎 UDP 连接是“无连接、未连接”的连接。
“无连接”和“未连接”不是多余的吗?
那么有 4 种类型的连接吗?
即
最后,“无连接、未连接”的连接如何发挥作用?这不是矛盾吗?哈哈
【问题讨论】:
标签: sockets networking tcp udp client-server
从技术上讲,您可以在 UDP 套接字上调用 connect()。在这种情况下,套接字会记住对等地址,以便可以使用send() 或write() 系统调用而不是sendto() 发送数据报。此外,它使套接字仅接收来自该对等方的数据报,来自其他对等方的数据报被丢弃。
这可能是所谓的“无连接、已连接”套接字,这意味着在 UDP 套接字上调用了 connect() 调用。
【讨论】:
事实上,没有 UDP 连接这样的东西。基本上,UDP 是一种即发即弃的协议,您只需将数据包发送到某台机器(无需先建立连接),并希望另一台机器能够接收它们(如果它们真的成功了)。
当您建立“套接字连接”时,不会发生任何神奇的事情,即您和远程客户端之间的电线不会改变颜色或其他东西。连接期间发生的事情是双方同意使用给定的协议通过互联网可靠地接收和发送数据。绝对不需要连接任何东西来通过互联网发送和接收东西,但是连接可以保证完整性和秩序(以及其他一些东西),因为两台机器都同意遵循某种方法。
我不知道“无连接、未连接”套接字之类的东西。谁告诉你这可能只是想强调 UDP 的非连接方面。
【讨论】:
使用 UDP 套接字,您可以像使用 TCP 套接字一样连接到服务器。但是您也可以使用sendto 函数将数据包直接发送到服务器而无需连接。
【讨论】:
是的,从技术上讲,UDP 不会建立连接。但是,您的代码可能连接到用于传输数据包的本地 UDP 套接字。
【讨论】: