1

我使用 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 来编码我的二进制数据?

4

1 回答 1

1

哦,棘手......你正在散列你的指针。

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

我建议在两端打印您发送的内容的十六进制值,以确认它是相同的,并且应该是。如果您发送一个以空值结尾的字符串,您可能会丢失空值。但这可能不是这里的情况,因为您指定它是无符号字符。

于 2015-12-02T18:10:32.747 回答