Python中的数据包队列?

时间:2009-11-24 19:20:27

标签: python sockets queue packet

有没有办法在Python中将数据包排队到套接字?我一直在寻找类似libipq库的东西,但找不到任何等价物。

这就是我想要完成的事情:

  1. 在服务器和客户端之间创建tcp套接字连接(在我的控制下)。
  2. 尝试传输数据(等待连接到故障 - 例如客户端由于关闭笔记本电脑而失去连接)
  3. 抓住SocketException并坚持下去 对于试图成为的数据 在保留剩余的时候发送 数据等待(在队列中?)
  4. 输入以循环尝试重新连接 (假设成功是 不可避免)
  5. 成功时创建新套接字
  6. 恢复数据传输
  7. 有什么建议吗? Can Twisted可以这样做吗?我是否需要参与pcapy?我应该在C中执行此操作(套接字,队列等)并使用Boost来制作混合代码吗?

    提前致谢。


    修改1:

    对尼克的回应:

      

    我遗漏了数据我会这样做的事实   传播将被推广   无休止的 - 想想这个应用程序   坐在ssh会议下(我不是   以任何方式试图窥探   包)。所以,传输将是   双边。我希望能够去   从办公室到我的家(关闭我的   笔记本电脑之间),打开笔记本电脑   回家并继续我的会议   无缝连接。 (我知道SCREEN存在)。   这可能会让你想知道它是怎么回事   没有代理人的工作。它不会,我只是   没有解释那个设计。   块引用

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

1 个答案:

答案 0 :(得分:0)

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

然后服务器记下客户端接下来需要的序列号并发送它。如果连接中断,则服务器重新建立连接。

无论如何,数据都可以被缓冲,但是我一开始就保持简单并且使用deque可能比list更有效地获取开始数据并结束。

我可能会创建一个具有序列号属性的Packet对象,以及一种将它及其数据序列化和反序列化为字节流的方法(例如使用netstrings)。然后,您将在您的双端队列中存储这些数据包。您可以从双端队列中弹出数据包,每当您收到客户的确认并发送下一个确认时。

此类协议有很多极端情况,需要超时并且通常很难调试。如果您想要一些想法,请查看某天的SMTP服务器的源代码!

对于套接字,您可以使用普通的python套接字轻松实现它,看看它是如何进行的。如果您计划一次拥有大量客户,那么扭曲将是一个好主意。