1
我想通過Winsocks發送一個int數組。我可能是錯的,但我敢肯定,只有一個char *被支持,所以我有點卡住如何正確地做到這一點。小Edian也有問題,那麼這將是一個好方法嗎?我已經提出了一個converting int array to char的問題,但建議在網絡部分對此啓動一個新線程。通過Winsocks發送一個int數組
我想通過Winsocks發送一個int數組。我可能是錯的,但我敢肯定,只有一個char *被支持,所以我有點卡住如何正確地做到這一點。小Edian也有問題,那麼這將是一個好方法嗎?我已經提出了一個converting int array to char的問題,但建議在網絡部分對此啓動一個新線程。通過Winsocks發送一個int數組
您誤解了您可以使用WinSock發送的內容。是的send()被定義爲採用char *緩衝區,但實際上它只需要一個數據緩衝區。如果今天定義了send(),buf將被定義爲void *。但是我相信在定義send()時void *不是C標準的一部分。
這個摘要是send()並不是什麼類型的指針傳遞給它,它只需要指針指向的原始字節並將它們填充到數據包中。它從不看它們。因此,有沒有錯只是傳遞數組:
int sendArray(SOCKET sock, int array[], int arrayLen) {
// You need to send the array length so the receiver knows
// how long the array is
int bytesSent = send(sock, (char*)&arrayLen, sizeof(arrayLen));
if (bytesSent != SOCKET_ERROR) {
// If that worked, send the
bytesSent = send(sock, (char*)array, sizeof(array[0]) * arrayLen);
}
return bytesSent;
}
然後,你必須寫上發送獲取數組的長度的環形,分配該大小的數組和循環的recv(),而它收集數組。
只要您的客戶端和服務器都具有相同的字節序,就不需要做任何額外的處理,因爲兩臺機器都具有相同的數據格式。由於你的問題被標記爲Windows,我認爲是這樣。
哦好吧,我確實有一個誤解。我會試試這個! – seed 2010-04-23 03:32:32