UDT无法发送无符号字符*

问题描述:

我使用UDT库发送我的数据。但似乎无法正确发送无符号字符*数据。一方面我把它像UDT无法发送无符号字符*

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 *而不是无符号的char *或void *的。这是否意味着我应该只发送char *或使用例如base64来编码我的二进制数据?

哦,棘手的......你哈希你的指针。

看到http://en.cppreference.com/w/cpp/utility/hash(下笔记)

我建议打印的您所发送的什么都结束,以确认它是相同的十六进制值,它应该是。如果您发送的是空终止的字符串,则可能缺少空字符串。但这可能不是这种情况,因为你指定它是无符号的字符。

+0

是的,我找到了,但忘了写在这里。它确实发送正常。我照你所说的做了:双方都做了十六进制的缓冲区,它们是一样的。但是你首先写了正确答案=) – user2123079