【问题标题】:C++ UDP client problemC++ UDP客户端问题
【发布时间】:2011-09-30 09:54:08
【问题描述】:

我正在开发一个可靠的基于 UDP 的文件共享程序。该程序由两部分组成。 服务器和客户端。 任何客户端都可以请求下载任何文件。发生这种情况时,服务器应通知拥有要下载的文件的客户端有人想要下载该文件。然后,服务器应该以某种方式向尝试下载文件的客户端指示拥有该文件的客户端的 IP 和端口。

程序快完成了。包括 ACKing 机制。但我有一个问题在过去的几个小时内无法解决。如果我在与我的服务器相同的机器上启动程序的客户端部分,然后在另一台机器上打开客户端的另一个实例,一切都很好。但是,如果我在一台机器上打开服务器并在不同机器上打开客户端程序,我无法将文件从一个客户端发送到另一个客户端。我不知道什么可能导致这个问题。如果您给我您的电子邮件,我很乐意向您发送解决方案我不想在这里发布 1000 行代码。

编辑: 好的。我尝试了所有可能的情况,但仍然没有解决方案。我开始考虑问题可能与程序无关,可能与我的网络连接有关。 我用作服务器的计算机使用以太网直接连接到路由器,但其他计算机使用无线连接。我不确定它是否有区别?我还尝试在我的一台无线计算机上运行服务器应用程序,但其他计算机无法连接到它。所以看起来问题与无线网络有关。

【问题讨论】:

  • 本问答论坛不鼓励提供离线帮助,因为它旨在使所有访问者受益,而不仅仅是提问者。如果您可以将问题提炼成一个展示该问题的小示例程序,您就更有可能获得帮助。这样做,您甚至可能自己发现错误。
  • Marcelo 的意思是,这个网站不是一个论坛。
  • @Cody:我指的是古典(字典)意义上的“论坛”。
  • @man 当然,您可以比“无法发送文件”更好地报告!例如:你收到数据包了吗?
  • netstat 显示什么?也许您只在环回上收听......另外,做一些tcpdump/wireshark 看看网络级别发生了什么

标签: c++ networking client udp wireless


【解决方案1】:

嗯,如果没有您的协议的详细信息,很难判断问题可能是什么,但这里有一些建议:

  1. 在服务器和客户端之间的协议中,检查请求文件的客户端是否正确请求。
  2. 接下来在服务器和第二个客户端之间,检查您的协议是否发送了正确的请求
  3. 检查第二个客户端是否生成正确的响应(例如我有文件或没有)
  4. 检查服务器是否正确处理此响应
  5. 检查服务器是否将第二个客户端的正确 ip 地址发送给第一个客户端
  6. 检查第一个客户端与第二个客户端的网络连接(例如防火墙等)
  7. 检查客户端中的处理逻辑是否正确处理响应。

通常您应该能够通过在客户端/服务器代码中输入适当的日志记录以及从第一个客户端到第二个客户端的简单 telnet/ping 等来完成上述操作。

只是从 cmets 上移一些东西...通过 UDP 实现可靠协议是一件棘手的事情,但是一个好的起点是假设您的代码已损坏并首先进行调查(如上述步骤)...

【讨论】:

  • 鉴于该协议是通过 UDP 实现的,因此可以说的还有很多。
  • @Marcelo,当然,但我不想整天坐在这里写关于通过 UDP 实现可靠协议的困难。对于这些类型的问题,一个好的起点是假设您的代码已损坏并首先进行调查。
  • 同意,你对我的评论的回应会比“不能再说什么......”更好的开场白了。
猜你喜欢
  • 2020-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多