【发布时间】:2011-10-18 17:32:47
【问题描述】:
我正在尝试使用 UDP 实现基本的文件传输协议。 我使用 Beej's Guide 作为参考,我将发布的大部分代码都来自那里。
到目前为止,我的程序让“谈话者”将它想要的文件名发送给“接收者”。
从那里,接收者检查文件是否存在,如果存在,它会计算出文件的大小。
现在这是我遇到问题的地方。我需要接收器将文件的大小发送给说话者。您可以在我的代码(下面的链接)中看到我是如何实现它的。然而,说话者只是挂起,就像它还在等待发送什么东西一样。
这让我觉得接收者需要一些额外的代码来允许它与说话者通信,而不仅仅是从中接收数据(我习惯于 TCP,所以请原谅我缺乏知识)。
谁能告诉我我缺少什么代码,或者我是否使用了错误的功能?很难遵循 Beej 的指南,而且他没有提供双向通信的示例。
谢谢,如果您需要更多信息,请告诉我。
听众:http://pastebin.com/UL1xjDnP
谈话者:http://pastebin.com/B2zrXPgZ
编辑:解决了! 感谢 cnicutar,
我在这段代码中寻址服务器,而我应该寻址客户端
if ((numbytes = sendto(sockfd,buffer,strlen(buffer), 0,
p->ai_addr, p->ai_addrlen)) == -1)
应该改成
if ((numbytes = sendto(sockfd,buffer,strlen(buffer), 0,
(struct sockaddr *)&their_addr, &addr_len)) == -1)
【问题讨论】:
-
“监听器”是否报告“监听器:文件大小已发送”?
-
我想知道为什么是 UDP? TCP 是一种更好的文件传输协议。 UDP 不提供顺序传送、重新发送损坏的数据等在传输文件时很关键的好处。
-
是的,监听器报告文件大小已发送。我也想学习UDP,我认为两者都知道很有价值。
-
@user974703 我在下面回答。另外,编辑您的问题并添加相关代码。
标签: c sockets networking udp posix