首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过QTcpSocket发送结构

通过QTcpSocket发送结构
EN

Stack Overflow用户
提问于 2011-05-04 15:53:36
回答 4查看 2.3K关注 0票数 2

我们是否可以通过QTcpSocket套接字将包含指向另一个结构的指针的结构发送到运行在该程序以外的其他物理位置的程序的QTcpServer套接字。我的代码将是这样的.

代码语言:javascript
复制
<i>
QTcpSocket tcpSocket = new QTcpSocket(this);
Struct a{ int a1; int a2;} __attribute__((packed));

Struct b { int b1; int b2}__attribute__((packed));
Struct c{ a *c1; a*c2; }QByteArray block;

QDataStream out(&block, QIODevice::WriteOnly);
out << quint16(0)<<c;
out << quint16(block.size() - sizeof(quint16));
tcpSocket->write(block);
</i>

但这有如下错误: /TcpClient-build-desktop/../TcpClient/tcpclient.cpp:137:错误:‘out.QDataStream::operator<<(0) << c’中的‘operator<<’没有匹配项

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-04 16:02:13

你当然可以,但这没有多大意义。:-)如果结构有指针,那么这些指针在远程主机上将是无效的。

当然,如果需要的话,您还可以发送指针所指向的内容。

一个提示:如果你为了可移植性而编程,记得在传输之前将任何整数转换成网络字节顺序,然后再转换回主机字节顺序。

Wikipedia article about endianness

票数 1
EN

Stack Overflow用户

发布于 2011-05-04 16:02:30

您可以这样做,只要接收方知道它不能只让发送进程解除对指针的引用。这将意味着与源进行沟通,并等待结果。这个过程被称为“对象代理”,并且已经在例如CORBA、COM+、jre等中实现。

指针只能在已知的虚拟内存中被解释。

票数 2
EN

Stack Overflow用户

发布于 2011-05-04 16:08:22

除此之外,您还可以使用一种类似于RPC系统的方法,该方法也发送这些指针所指向的对象,但将它们保留在堆上,并相应地更改接收机器上的指针,这样您就可以实际获得工作的指针。当然,要做到这一点而不犯错误并不容易,只有在不可能改变概念的情况下才应该使用这种方法。

诚挚的问候

D

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5880287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档