我正在开发一个测试套件,一个Python程序启动并测试一个C#程序并在测试完成后终止它。 C#程序多次启动,一个接一个(所以启动,测试,杀死,启动,测试,杀死等)重新连接后TCP数据丢失。
C#程序有一个TCP服务器,Python连接到它并发出一些要测试的动作。
但是,数据不时会丢失。我捕获了TCP数据并通过代码进行调试,但找不到确切的原因。转储看起来很奇怪,也许你可以帮忙吗?
帧至多773示出了一个测试(Python的上端口49xxx,C#2000)。数据被交换,然后Python在771关闭连接。这部分工作。
我不知道为什么RST是在773发送的,但我不是tcp专家。
从774开始,C#应用程序已重新启动,Python尝试连接到它。这看起来很奇怪。数据在779和781中发送,但不在C#中显示。
在这里,我的应用程序挂起,Python等待响应,C#等待传入数据。
这可能不是问题,因为你正在本地主机上运行一切,但我会把它扔到那里。你是否以管理员身份登录?如果没有,你是否以管理员身份运行这些程序?如果您没有以管理员身份运行,我已经看到了Windows将终止来自不可信软件的网络连接的情况。 – rtaft
如果您注意到跟踪中存在大量一起发生的ACK。这表明连接的接收方没有跟上发送速率。您还会注意到序列号正在重复,表示数据包正在重新发送。我会尝试增加发送数据包之前的时间。连接的接收端运行缓慢,而不是导致数据包重新发送的确认数据包。最终连接的发送方关闭,因为它没有得到分组的确认。 – jdweng
也许我不明白你的意思,但我在日志中看不到一次重发。连接的两端都发送和接收,数据传输率很低。 从774开始,客户端源端口发生更改,因此它是不同的连接。 – Johannes