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

最佳答案

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

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

    )。
  • 将boost_python库的版本(在“setup.py”中)更新为您要的版本
    使用

  • 例如。:
        ... 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

    关于适用于UDT C++库的Python包装器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7222852/

    10-12 17:01