我正在编写一个应用程序,用于使用 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/