gpt4 book ai didi

c - 为什么UDP socket通信不出错?

转载 作者:太空宇宙 更新时间:2023-11-04 06:19:03 24 4
gpt4 key购买 nike

我是一名学习计算机网络的学生。我使用 UDP 协议(protocol)在 Ubuntu 上用 C 编写了非常简单的服务器-客户端套接字通信程序。我在书上看到UDP是不可靠的数据传输协议(protocol),而TCP是可靠的数据传输协议(protocol)。原因是UDP只是发送数据包,而TCP正在发送并等待接收相应的ack消息。

无论如何,我尝试了很多次使用 UDP 套接字从客户端向服务器发送图像文件(大约 1Mb)。但是,图像文件传输成功,没有任何故障。

socket库有UDP设置的纠错方案吗?

ps) 我的程序与C 中常见的echo socket 代码几乎相同。不同的是不是回显而是复制。即客户端传输数据,服务器接收并复制数据。

供引用)我将 sys/socket 头文件用于套接字函数。我使用 fopen、fread 和 fwrite 来复制文件。

最佳答案

Anyhow, I tried many times to send an image file (around 1Mb) from client to server using UDP socket. However, the image file was transmitted successfully without any one failure.

如果通过环回在单个主机上完成,则不会丢失任何数据包(除非您启用了一些数据包丢失测试功能)。这是因为现代操作系统的网络层只传递指向数据包描述符的指针。因此,当您在套接字上执行 send()write() 时,将围绕您的数据构建数据包描述符结构;该结构在编写过程中“存在”,并且只有一个指向它的指针会传递给将要接收它的任何人。如果它是另一个进程,这会在 IPC 中有效地产生(如果您使用正确的套接字操作,这甚至可以达到零拷贝数据传输)。仅当该数据包描述符在网络接口(interface)驱动程序中结束时,才会传递的不仅仅是该指针。

在本地网络上,丢失数据包几乎是不可能的,因为冲突检测发生在链路层,而现代交换机采用存储转发架构。注意到任何形式的数据包丢失背压都需要巨大的网络负载。

要使数据包丢失变得明显,您必须使用竞争激烈的共享媒体网络(例如,有许多客户端争用它的 W-LAN)或通过至少一个接近其带宽容量的路由器。

Does socket library have error correction scheme although UDP setting?

没有。

关于c - 为什么UDP socket通信不出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39248110/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com