0

我尝试使用write()命令写入套接字。我需要写入的数据是结构类型的,它包含数据类型charint数据类型的值。但是当我将数据写入服务器套接字时,int变量的值被破坏了。我16777216一如既往地收到一个价值。

我正在从一Solaris台机器写到一台Linux机器。Solaris是32位机器,Linux也是64位机器。这对我的问题有什么影响。

我使用htonl/ntohl和反之亦然将integer 值从服务器传递到服务器。但是,如果我将整个结构类型写入套接字,我该如何使用它呢?谁能帮我解决这个问题?

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是结构类型和具有intchar类型值。

我正在从包含数字、char类型值的数据库表中写入特定行。我正在写这样的不同表格的不同行。因此,如果我需要使用htonl/ntohl那么我需要将所有这些数字转换为网络字节。由于我有 20 个或更多表及其具有整数类型值的结构,因此将所有这些转换并发送出去对我来说将是一项耗时的工作。

4

1 回答 1

2

看来您的字节顺序有问题。有几种不同的方法可以解决这个问题:一种是研究序列化,即将您发送的结构转换为与字节顺序问题无关的格式;另一种解决方案是创建结构的副本,并在需要时使用 eg htons/ :htonl

WSMsg temp = *msg;
temp.someShortField = htons(temp.someShortField);
// etc.

然后当然在接收端做相反的事情。

于 2012-11-29T12:10:22.820 回答