UDT C ++库的Python包装器

时间:2011-08-28 18:05:58

标签: python wrapper boost-python udp-data-transfer

我想在Python中使用UDT library,所以我需要一个包装器。我找到了这个:pyudt,但我不确切知道如何使用它来发送来自对等的文件。任何人都可以指出我正确的方向吗?

2 个答案:

答案 0 :(得分:2)

经过这么多次,我发现了这个问题及其解决方案:

安装pyudt-0.1a的步骤是:

  • 安装: libboost-python1.46-dev或同等的 (例如,在linux-ubuntu12.04中,它位于代表中。)

  • 将udt.h(来自:http://sourceforge.net/projects/udt/)安装到系统目录中,

OR
(将udt.h文件放在与pyudt-0.1a文件相同的路径中,然后从:

更改“pyudt.cpp”的一行
#include <udt.h>

为:

#include "udt.h"

)。

  • 将“setup.py”中的boost_python库版本更新为您的版本 使用,

例如:

    ... libraries=['udt', 'boost_python-py27'])
  • 更改“pyudt.cpp”中的以下行:

必须 更正错误,改编自:

int r = UDT::send(_sock, data.c_str(), data.length(), 0);

为:

int r = UDT::send(_sock, data.c_str(), data.length()+1, 0);

因为字符串“\ 0”表示字符串的结尾也必须发送,否则垃圾邮件会附加到你的字符串中。

您可以选择:

   _sock = UDT::socket(AF_INET, SOCK_DGRAM, 0);   --» default

或:

   _sock = UDT::socket(AF_INET, SOCK_STREAM, 0);  --» optional
  • 最后,跑,

在相应的文件夹中:

python2.7 ./setup.py build
sudo python2.7 ./setup.py install

或者,(如果您没有管理员权限为所有用户安装它,并且只是想为您尝试:

python2.7 ./setup.py build
python2.7 ./setup.py install --prefix=~/pyudt-0.1a/installation_dir/  #in this case, pyudt would only work if called from that directory

然后,简单客户端的代码可以是:

import pyudt
socket = pyudt.pyudt_socket()
socket.connect(("127.0.0.1", 7000))
socket.send("hello_world!")

它有效,它与我的cpp服务器对话!

注意:如果您需要更多帮助,可以在python控制台中编写:

import pyudt
dir(pyudt.pyudt_socket) # to list the available functions
help(pyudt)             # to get more help

PS。使用此安装教程创建的文件是: /usr/local/lib/python2.7/dist-packages/pyudt.so,/usr/local/lib/python2.7/dist-packages/pyudt-0.1a.egg-info

答案 1 :(得分:1)

您可以试试我的udt_py fork。它现在包含一个示例recvfile.py,可以从udt的sendfile目录中的app守护程序中检索文件。