首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的数据包队列?

Python中的数据包队列?
EN

Stack Overflow用户
提问于 2009-11-24 19:20:26
回答 1查看 1.5K关注 0票数 2

有什么方法可以在Python中将数据包排队到套接字上吗?我一直在寻找类似libipq库的东西,但是找不到任何类似的东西。

以下是我想要完成的任务:

  1. 在服务器和客户端(都在我的控制下)之间创建tcp套接字连接。
  2. 尝试传输数据(等待与故障的连接--例如,客户端由于关闭膝上型计算机而失去连接)
  3. 捕获SocketException并保存试图发送的数据,同时保持其余的数据等待(在队列中?)
  4. 进入试图重新连接的循环(假设成功是不可避免的)
  5. 成功后创建新套接字
  6. 恢复数据传输

有什么建议吗?Twisted能这么做吗?我需要牵涉到pcapy吗?我应该在C中这样做(套接字、队列等)并使用Boost来生成混合代码吗?

提前谢谢。

编辑1:

对Nick的答复:

我忽略了这样一个事实,即我将要传输的数据将是广义的、无穷无尽的--想想这个坐在ssh会话下的应用程序(我根本不想窥探数据包)。因此,传输将是双边的。我希望能够从办公室到我的家(关闭我的笔记本电脑之间),打开笔记本电脑在家里,并继续我的会话无缝。(我知道屏幕存在)。这可能会让你想知道没有代理是怎么工作的。不会的,我只是还没解释过这个设计。区块报价

使用添加的上下文,我还应该说,我不必在服务器端捕获SocketException,因为该机器将被修复(或假定是修复的)。当客户端发现它再次具有连接性时,它就会重新连接到服务器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-11-24 21:35:39

我建议您实现一个应用程序协议,因此当客户端接收到数据时,它会向服务器确认它,并为每一位数据提供序列号。

然后,服务器记录客户端下一步需要的序列号,并发送。如果连接中断,那么服务器就会重做。

数据可以随时缓冲,但是我会让它简单地开始,并使用德克 (可能比list更有效)来获取开始和结束的数据。

我可能会创建一个带有序列号属性的包对象,以及一种将其及其数据序列化和取消序列化为字节流的方法(例如使用网串)。然后,您将这些数据包存储在您的设备中。当您收到客户确认并发送下一封邮件时,您就会将数据包从deque上弹出。

这样的协议有很多种情况,需要超时,而且通常调试起来很烦人。如果您想知道一些想法,请在某一天查看SMTP服务器的源代码!

至于套接字,您可以很容易地用普通的python套接字来实现它,看看它是如何实现的。如果你计划同时拥有很多客户,那么扭曲将是一个好主意。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1792320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档