我试图使用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