服务器未收到UDP数据包,花费数小时试图找出问题所在

Server not receiving UDP packets, been spending hours trying to figure out what's wrong

本文关键字:小时 出问题 UDP 数据包 服务器      更新时间:2023-10-16

因此,对于我们的第一个任务,我们使用TCP制作了一个基本的FTP程序,现在我们必须对其进行修改以使用UDP,也将其发送到路由器程序(我们无法修改,但已有要查看的代码)将随机删除和延迟数据包,并使用简单的停止和等待协议处理。但这不是问题。

我修改了客户端和服务器以使用我的实验室老师的注释(http://www.cs.concordia.ca/~ste_mors/comp445/comp445/assign2tutorial.ppt),我要做的就是发送一个数据包,当我在另一端收到它时,打印了一行文本。我遵循幻灯片中的说明,在Localhost上运行它(没有其他机器可以测试)并发送,并且路由器确认它接收并转发数据包,但是服务器从未打印过文本线。知道UDP丢弃了很多我制作的(true)永远发送数据包的循环,服务器仍然什么都不做。

这是到目前为止的代码:客户端:http://pastebin.com/xdbxuj9r服务器:http://pastebin.com/in5j2ku3送给我们的路由器无法解码:http://pastebin.com/qwmac0mw

对于客户,我在连接始于旧连接后留下的所有内容,发送行是175,在服务器中,我在运行循环中评论了所有内容,除了在第181行

处的接收零件外

我将绝对疯狂地尝试解决这个问题。我不得不取消计划并毁了我的整天,因为我无法使这件事有效。:(

我可以告诉您使用错误的端口。这是路由器的定义:

// router.h
#define ROUTER_PORT1 7000 //router port number 1
#define ROUTER_PORT2 7001 //router port number 2
#define PEER_PORT1 5000   //port number of peer host 1
#define PEER_PORT2 5001   //port number of peer host 2

这就是您的定义:

// client.cpp
#define REQUEST_PORT 0x5000 // hexadecimal, that's port 20480

// server.cpp
#define REQUEST_PORT 0x5001 // hexadecimal, that's port 20481

我没有检查其余的代码,但是服务器在纠正端口号后似乎会收到一些东西(如删除0x前缀)

也许这将有助于说明路由器的工作方式:

// the router does (pseudocode):
recvfrom(7000), sendto(PEER2:5001)
recvfrom(7001), sendto(PEER1:5000)