服务器没有收到UDP数据包,花了好几个小时试图弄清楚什么是错的

时间:2012-11-11 01:42:24

标签: c++ network-programming udp winsock

因此,对于我们的第一个任务,我们使用TCP创建了一个基本的ftp程序,现在我们必须将其修改为使用UDP,同时将其发送到路由器程序(我们无法修改,但需要查看代码)随机丢弃和延迟数据包并使用简单的停止和等待协议处理它。但那不是问题。

我使用我实验室老师的笔记(http://www.cs.concordia.ca/~ste_mors/comp445/Assign2tutorial.ppt)修改了客户端和服务器以使用UDP,我正在做的就是发送一个数据包,当我在另一端收到它时打印一行文字。我按照幻灯片中的说明操作,在localhost上运行它(没有其他机器可以测试)并且它发送,并且路由器确认它接收并转发数据包,但服务器从不打印文本行。知道UDP丢弃了很多数据包我做了一个永远发送数据包的while(true)循环,服务器仍然没有做任何事情。

到目前为止,这是代码: 客户:http://pastebin.com/XdbxuJ9R 服务器:http://pastebin.com/iN5j2Ku3 提供给我们的不可修改的路由器:http://pastebin.com/QwMAc0MW

对于客户端我从旧的连接开始后留在所有内容中,发送行是175,在服务器中我注释掉了运行循环中的所有内容,除了第181行的接收部分

我想要解决这个问题我真的很疯狂。我不得不取消计划并毁掉我的一整天,因为我不能让这一件事起作用。 :(

1 个答案:

答案 0 :(得分:4)

从我可以告诉你使用错误的端口。这是router.h定义的内容:

// 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)