gpt4 book ai didi

c++ - read() 和 write() 到套接字返回损坏的值

转载 作者:太空宇宙 更新时间:2023-11-04 09:48:34 25 4
gpt4 key购买 nike

我尝试使用 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 个或更多表及其具有整数类型值的结构,转换所有这些并发送对我来说将是一项耗时的工作。

最佳答案

您似乎遇到了字节顺序问题。有几种不同的方法可以解决这个问题:一种是查看 serialization。 ,即将您发送的结构转换为独立于字节顺序问题的格式;另一种解决方案是创建您的结构的拷贝,并使用例如htons/htonl 需要的地方:

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

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

关于c++ - read() 和 write() 到套接字返回损坏的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13625405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com