【问题标题】:Difference between TCP and UDP socketsTCP和UDP套接字之间的区别
【发布时间】:2016-08-15 21:27:22
【问题描述】:

使用 TCP 套接字(sock_stream)和 UDP 套接字(数据报)建立连接有什么区别。到目前为止,我认为像 我们只能使用连接函数为 TCP 套接字创建连接。但是,可以与 UDP 套接字建立连接。 到目前为止,我还不知道如何与 UDP 套接字建立连接。这两者有什么区别?

        int tcpsock = socket(AF_INET, SOCK_STREAM, 0);
        connect(tcpsock,(struct sockaddr*)&sa,sizeof(sa));

        int udpsock = socket(AF_INET, SOCK_DGRAM, 0);
        connect(udpsock,(struct sockaddr*)&sa,sizeof(sa));  // How ?

UDP 是无连接的。那么如果我们使用 UDP 怎么可能建立一个类似于 TCP 的连接呢?

我已经知道 TCP 和 UDP 之间的区别。我的疑问是,UDP 是 无连接那么connect函数如何返回成功?

【问题讨论】:

  • 为什么会有 C 和 C++ 标签?
  • 您是否尝试过在 Google 中输入"difference between TCP and UDP",然后阅读一些结果?
  • “到目前为止,我认为我们只能使用连接函数为 tcp 套接字创建连接。” 嗯,那是因为 TCP 协议需要这样做。 UDP 协议是无连接的。
  • @πάνταῥεῖ 但是即使对于 udp 套接字,connect 函数也会返回 0(成功)。

标签: sockets tcp udp


【解决方案1】:

UDP 中的connect() 函数 (a) 告诉 UDP 将所有数据报发送到哪里,因此您可以使用 send() 而不是 sendto(),并且 (b) 充当传入数据报的过滤器,因此您可以使用recv() 而不是 recvfrom()。它不会在网络上做任何事情:它只是一个本地操作。它总是返回零,因为它不会失败。但是发送到不存在的目标可能会失败...

都记录在案了。

【讨论】:

    猜你喜欢
    • 2013-05-21
    • 2021-08-12
    • 2013-06-01
    • 2018-04-03
    • 2011-08-23
    • 2020-10-18
    • 2018-02-19
    • 2015-12-14
    • 1970-01-01
    相关资源
    最近更新 更多