UDT无法发送unsigned char *

时间:2015-12-02 15:42:45

标签: c++ c network-programming protocols udp-data-transfer

我使用UDT库发送数据。但似乎无法正确发送unsigned char *数据。一方面我发送它像

int rc = UDT::sendmsg(socket, full_data, size, -1, true);

另一方面,我收到的是:

unsigned char* data;
int size = 2500;
data = new char[size];

while (true) {
    int rc = UDT::recvmsg(sock, data, size);
    if (rc == -1) std::cout << "Error: " << UDT::getlasterror().getErrorMessage() << std::endl;
    else std::cout << "Received packet of length" << rc << std::endl;
}

双方发送/接收计数字节相同。但数据不同。当我做的时候

std::hash<unsigned char*> ptr_hash;
cout << "Hash: " << ptr_hash(data);

我有不同的哈希。在UDT来源中有以下几行:

UDT_API int sendmsg(UDTSOCKET u, const char* buf, int len, int ttl = -1, bool inorder = false);
UDT_API int recvmsg(UDTSOCKET u, char* buf, int len);

正如您所看到的,输入参数是char *但不是unsigned char *或void *。这是否意味着我应该只发送char *或使用例如base64来编码我的二进制数据?

1 个答案:

答案 0 :(得分:1)

哦,很棘手......你正在指责你的指针。

请参阅http://en.cppreference.com/w/cpp/utility/hash(在备注下)

我建议打印您在两端发送的内容的十六进制值以确认它是相同的,它应该是。如果您正在发送以空字符结尾的字符串,则可能缺少空值。但是,鉴于你指定它的未签名字符,这可能不是这种情况。