UDT C++ 的 Python 包装器图书馆

发布于 2024-12-02 08:00:13 字数 211 浏览 0 评论 0原文

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

I want to use the UDT library in Python, so I need a wrapper. I found this one: pyudt, but I dont know exactly how to use this to send files from a peer to peer. Can anybody point me in the right direction?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

纵性 2024-12-09 08:00:13

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

安装 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-info

after so many time I've found this question and its solution:

The steps to install pyudt-0.1a are:

  • install:
    libboost-python1.46-dev or equivalent
    (for instance, in linux-ubuntu12.04 it's in the reps.)

  • install udt.h (from: http://sourceforge.net/projects/udt/) into a system directory,

OR

(put the udt.h file in the same path as the pyudt-0.1a files, and then change a line of the "pyudt.cpp", from:

#include <udt.h>

to:

#include "udt.h"

).

  • update the version of boost_python library, in "setup.py" to the one you're
    using,

eg.:

    ... libraries=['udt', 'boost_python-py27'])
  • change the following line(s) in "pyudt.cpp":

you must correct a bug, changing from:

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

to:

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

because the character "\0" meaning the end of string must also be sent, otherwise junk would be appended to your string.

optionally, you may choose between:

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

or:

   _sock = UDT::socket(AF_INET, SOCK_STREAM, 0);  --» optional
  • finally, run,

in the corresponding folder:

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

OR, (if you don't have admin permissions to install it for all the users, and just wanna try it for you:

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

)

Then, the code for a simple client can be:

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

and it works, it talks with my cpp server!

notice: if you need more help you can write in the python's console:

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

PS. the files created with this installation tutorial are:
/usr/local/lib/python2.7/dist-packages/pyudt.so, and /usr/local/lib/python2.7/dist-packages/pyudt-0.1a.egg-info

薄荷→糖丶微凉 2024-12-09 08:00:13

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

You can give my udt_py fork a try. It includes a sample recvfile.py now and can retrieve files from the sendfile daemon in udt's app directory.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文