2010-04-22 65 views
1

我想通過Winsocks發送一個int數組。我可能是錯的,但我敢肯定,只有一個char *被支持,所以我有點卡住如何正確地做到這一點。小Edian也有問題,那麼這將是一個好方法嗎?我已經提出了一個converting int array to char的問題,但建議在網絡部分對此啓動一個新線程。通過Winsocks發送一個int數組

回答

2

您誤解了您可以使用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,我認爲是這樣。

+0

哦好吧,我確實有一個誤解。我會試試這個! – seed 2010-04-23 03:32:32