【发布时间】:2014-11-06 10:31:36
【问题描述】:
我正在使用 UDT 库在 NAT 后面的计算机之间传输文件。我已经在 python 中做了一个打孔协议,我知道它是如何工作的。 在这里,我正在尝试将 UDT 套接字绑定到现有的 UDP 套接字。
int udt_holepunching(SOCKET sock, SOCKADDR_IN sin, int size, SOCKADDR_IN peeraddr)
{
UDTSOCKET u;
bool rdv = true;
UDT::setsockopt(u, 0, UDT_RENDEZVOUS, &rdv, sizeof(bool));
UDT::bind(u, sock);
UDT::connect(u, &peeraddr, sizeof(peeraddr));
}
sock 我现有的 UDP 套接字
和peeraddr我要通话的电脑地址
我有这个错误:
client.cpp: In function ‘int udt_holepunching(SOCKET, SOCKADDR_IN, int, SOCKADDR_IN)’:
client.cpp:29:20: error: invalid conversion from ‘SOCKET {aka int}’ to ‘const sockaddr*’ [-fpermissive]
UDT::bind(u, sock);
^
client.cpp:29:20: error: too few arguments to function ‘int UDT::bind(UDTSOCKET, const sockaddr*, int)’
In file included from client.cpp:13:0:
../src/udt.h:315:13: note: declared here
UDT_API int bind(UDTSOCKET u, const struct sockaddr* name, int namelen);
这有点奇怪,因为在UDT bind documentation,这似乎是可能的。
【问题讨论】:
-
首先,您显示的代码与错误不匹配。其次,再次阅读错误,它告诉您
bind所需的参数,而不是您传递给它的参数。 -
我的错,我编辑了它。我明白你的意思,但在文档中写到 bind 只能接受一个参数:现有的 UDP 套接字。这就是我正在尝试做的,但它不起作用
-
我认为这可能是文档错误,您可以尝试改用
bind2(UDTSOCKET, UDPSOCKET)吗? -
其实是
bind2(udtsocket, udpsocket)谢谢提示!
标签: c++ sockets udp udp-data-transfer