2015-12-02 103 views
1

我使用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來編碼我的二進制數據?

回答

1

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

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

我建議打印的您所發送的什麼都結束,以確認它是相同的十六進制值,它應該是。如果您發送的是空終止的字符串,則可能缺少空字符串。但這可能不是這種情況,因爲你指定它是無符號的字符。

+0

是的,我找到了,但忘了寫在這裏。它確實發送正常。我照你所說的做了:雙方都做了十六進制的緩衝區,它們是一樣的。但是你首先寫了正確答案=) – user2123079

相關問題