【发布时间】:2019-04-10 20:11:34
【问题描述】:
我教学生开发网络应用程序,包括客户端和服务器。目前,我们还没有接触到现有的协议,例如 HTTP、SMTP 等。学生们在普通的套接字 API 之上编写了非常简单的程序。目前我手动检查学生的工作,但我想自动化这项任务并为网络应用程序创建一个自动化测试台。最有趣的测试主题是:
- 将 TCP 分段分成小部分并以明显延迟交付它们。我需要这样的测试的一个原因是学生通常只是发出
read/recv调用并处理接收到的数据,而不检查是否收到了所有必要的数据。 TCP 不保证消息边界,因此在某些情况下需要进行多次read/recv调用。问题在于,在大多数简单的网络应用程序中(例如,在聊天应用程序中),消息都很小并且适合单个 TCP 段,因此不会出现问题。我的想法是人为地将消息分成几个小的 TCP 段(即几个字节的数据),这样问题就会出现。 - 暂停数据传输一段时间以模拟多个慢速客户端,并检查学生服务器中的多线程/异步套接字是否正确实现。
- 随机重置连接。
我发现了几个模拟不良网络的系统(dummynet、clumsy、netem)。但是,它们都在堆栈的 IP 级别上工作,因此操作系统及其 TCP 实现将补偿数据丢失。这样的系统能够解决任务 2,但他们无法解决任务 1 和 3。所以我认为我需要开发自己的解决方案,它将充当 TCP 代理。我的问题是:
- 也许有任何库或应用程序可以(至少部分)解决给定任务,所以我可以将它们用作我自己的解决方案的基础?
- 如果没有任何合适的现有软件项目,也许有任何关于如何正确执行此操作的想法和方法?
【问题讨论】:
-
如果你用的是windows,你可以试试test-connection
标签: sockets networking tcp operating-system automated-tests