0

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

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

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

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

我要疯了,试图解决这个问题。我不得不取消计划并毁掉我的一整天,因为我无法让这件事发挥作用。:(

4

1 回答 1

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)
于 2012-11-11T07:34:54.130 回答