停止连接tcp数据包

2024-03-29 09:25:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个发送tcp包的应用程序,都是用python2编写的。客户端发送数据包太快,无法连接到tcp服务器。有没有办法让python只从socket恢复最后发送的包?我将与它一起发送文件,所以我不能仅仅使用一些字符作为包终止符,因为我不知道文件的内容。在


Tags: 文件服务器应用程序客户端内容socket数据包字符
3条回答

首先,您需要知道数据包是在发送之前还是之后组合的。使用wireshark检查发送者是否发送了一两个包。如果它正在发送一个,那么修复方法是在每次写入后调用flush()。我不知道如果接收者在接收到数据包后合并它们的答案。在

你可以更改发送的内容。你可以先发送字节,然后再发送字节。然后另一方就会知道要读多少字节。在

TCP使用数据包进行传输,但它不向应用程序公开。相反,TCP层可以决定如何将数据分成包,甚至是片段,以及如何传递它们。通常情况下,这种情况是由于网络拓扑结构不稳定造成的。在

从应用程序的角度来看,您应该将TCP连接视为一个八位字节流,即数据单元是字节,而不是数据包。在

如果您想传输“数据包”,请使用面向数据报的协议,如UDP(但请注意,此类数据包有大小限制,使用UDP时,您需要自己处理重新传输),或手动包装它们。例如,您总是可以先通过TCP发送包的长度,然后再发送有效负载。另一方面,首先读取大小,然后知道需要跟随多少字节(注意,可能需要多次读取才能获得所有内容,因为存在碎片)。在这里,TCP将负责顺序传递和重传,因此这更容易。在

TCP是一种流协议,它不公开单个数据包。虽然从流中读取和获取数据包可能在某些配置中有效,但即使对操作系统或涉及的网络硬件进行微小更改,也会中断。在

要解决此问题,请使用更高级别的协议来标记文件边界。例如,可以在文件前面加上以八位字节(字节)为单位的长度前缀。或者,您可以切换到已经处理这类事情的协议,比如http。在

相关问题 更多 >