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 フォークを試してみてください。サンプルが含まれており、udt のディレクトリにrecvfile.pyあるデーモンからファイルを取得できます。sendfileapp

于 2012-09-08T07:38:01.000 に答える