2 个回答
1
你可以试试我的这个udt_py分支。里面现在有一个示例文件recvfile.py
,可以从udt的app
目录里的sendfile
服务中获取文件。
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
附注:通过这个安装教程创建的文件是: /usr/local/lib/python2.7/dist-packages/pyudt.so,以及/usr/local/lib/python2.7/dist-packages/pyudt-0.1a.egg-info