c - 用C语言在UDP套接字上传输文件! Linux

标签 c sockets udp

我正在编写一个应用程序,用于使用 UDP 套接字在两台主机之间传输文件。

但似乎有些数据到达客户端时已损坏。

我的问题是:如果服务器比客户端快,客户端是否有可能从套接字读取损坏的数据?

我在服务器中使用sendto(),在客户端中使用read()(在开始传输数据之前,我使用connect())文件在客户端), 如果是:如何阻止服务器发送新数据,直到客户端读取所有以前的数据?

最佳答案

is it possible that if the server is faster than the client, the client could read corrupted data from the socket?

不,这是不可能的 - 您看到的每个数据报都经过 IP 层的错误检查,并且将按照发送时的样子进行。

how can I stop the server from sending new data until the client has read all the previous data?

通常,您发送一个小数据包,接收方发送一个确认,然后您发送下一个数据包。然而,UDP 的问题是数据包可能会被丢弃,而不告诉您事件重复,而且由于没有拥塞控制,您可能会淹没网络。

那么为什么要重新发明轮子,使用 TCP 来发送文件,以保证可靠性和拥塞控制 - 每个人都已经使用它几十年了,例如该网页通过使用 TCP 的 HTTP 传送给您。

关于c - 用C语言在UDP套接字上传输文件! Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39427192/

相关文章:

c - 按特定顺序执行 pthreads?

node.js - 在 Node.JS 绑定(bind)中从 ZMQ 获取 Socket 选项

java - 在同一套接字连接中发送具有文件 ID 的多个文件

C#如何在从ASCII编码后写入字符串部分?

c - Malloc 打印不正确?

c++ - 位域如何与字符类型一起使用?

c - 与 malloc/free 相比,使用 C99 VLA 是个好主意吗?

php - 通过PHP zklibrary的zkteco RFID Id阅读器

c - Arduino:通过UDP发送整数数组

Java语音聊天