我試圖使用write()
命令寫入套接字。我需要寫入的數據是結構類型,它包含char
和int
數據類型值。但是,當我將數據寫入服務器套接字時,int
變量的值被損壞。我總是收到價值爲16777216
。讀取()和寫入()到套接字返回損壞值
我從Solaris
機器寫入Linux
機器。 Solaris
是一個32位機器,Linux
是一個64位機器。這對我的問題有什麼影響嗎?
我使用htonl
/ntohl
,反之亦然,用於將int
埃格爾值從服務器傳遞給服務器。但是如果我將整個結構類型寫入套接字,我該如何使用它?任何人都可以幫我解決這個問題嗎?
PCHAR data = NULL;
int size = sizeof(WSMsg);
int retry = 10;
data = new char [sizeof(WSMsg)];
memcpy(data, msg, sizeof(WSMsg));
int n = write(fd, &data[0], size);
這是我的代碼部分。這裏WSMsg
是結構類型,並有int
和char
類型的值。
我正在從數據庫表中寫入一個包含數字char
類型值的特定行。我正在寫這樣的不同行的不同表格。所以如果我需要使用htonl
/ntohl
那麼我需要將所有這些數字轉換爲網絡字節。由於我有20個或更多的表格及其具有整數類型值的結構,因此對於我來說,將所有這些數據轉換併發送都是一項耗時的工作。
爲什麼不直接用結構調用'write'?即'write(fd,msg,sizeof(WSMsg))' –
我可以這樣做,但是當我在另一端收到數據時,我的整數值會被損壞。如果我將數據從Solaris傳輸到Solaris或從Linux傳輸到Linux,那麼一切正常。當我從Solaris寫入Linux時,問題就出現了,反之亦然。 –
「Solaris」通常意味着「SPARC」是大端,而「Linux」通常意味着「x86或ARM」。因此寫一個完整的結構導致腐敗並不令人驚訝。 – Damon