5

我想在 Python 中使用UDT 库,所以我需要一个包装器。我找到了这个:pyudt,但我不知道如何使用它从点对点发送文件。谁能指出我正确的方向?

4

2 回答 2

2

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

安装 pyudt-0.1a 的步骤是:

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

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


(将 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 -信息

于 2013-09-16T22:50:51.523 回答
1

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

于 2012-09-08T07:38:01.000 回答