UDP不会发回任何ack,但它会发送任何响应吗?
我已经设置了客户端服务器UDP程序。如果我给客户端发送数据到不存在的服务器,那么客户端会收到任何响应吗?
我的假设是;
客户端-->广播服务器地址(ARP)服务器-->使用其mac地址(ARP)回复客户端客户端将数据发送到服务器(UDP)
在任何情况下,客户端都只能接收ARP响应。如果服务器存在或不存在,它将不会得到任何UDP响应?
客户端正在使用sendto函数发送数据。我们可以在sendto调用之后获得错误信息。
所以我的问题是,当客户没有得到任何响应时,这些信息是如何获得的。错误码可以从WSAGetLastError获取。
我尝试将数据发送到不存在的主机,但发送呼叫成功。根据文档,它应该失败,返回值为SOCKET_ERROR。
有什么想法吗?
发布于 2008-12-02 11:03:49
对于未到达目的地的UDP数据包,您永远不会收到错误或通知。
发布于 2011-09-15 14:53:43
sendto调用没有失败。数据报已发送到目的地。
数据报的接收方或途中的某个路由器可能会返回错误响应(主机无法到达、端口无法到达、超过TTL )。但是当您的系统收到sendto调用时,它将成为历史记录。有些操作系统确实提供了一种方法来找出发生这种情况的原因,通常是通过getsockopt调用。但是,由于您不能依赖于获得错误回复,因为它取决于您无法控制的网络条件,因此通常最好忽略它。
位于UDP之上的合理协议使用应答。如果你没有得到回复,那么要么是另一端没有收到你的数据报,要么是回复没有发回给你。
发布于 2008-12-02 11:06:53
"UDP是一种更简单的基于消息的无连接协议。在无连接协议中,不需要建立专用的端到端连接。通信是通过在单向中传输信息来实现的,从源到目的地,无需检查目的地是否还在那里,或者它是否准备接收信息。“
https://stackoverflow.com/questions/333629
复制相似问题