通过QTcpSocket发送结构

时间:2011-05-04 07:53:36

标签: qt

我们可以发送包含指向其他结构的指针的结构,通过QTcpSocket套接字到运行在其他物理位置的程序的QTcpServer套接字然后这个程序。我的代码就像这样......

<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&lt;&lt;(0)&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; C”

4 个答案:

答案 0 :(得分:2)

只要接收者知道它不仅可以通过发送过程取消引用指针,就可以。这意味着与源进行通信并等待结果。这个过程被称为“对象经纪”,并已在例如CORBA,COM +,jre等。

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

答案 1 :(得分:1)

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

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

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

Wikipedia article about endianness

答案 2 :(得分:0)

添加到已经说过的内容你也可以使用类似于RPC系统的方法,该方法也发送指针指向的对象,但是将它们保存在堆上并相应地改变接收机器上的指针,就像你一样实际上得到有效的指针。 要做到这一点没有错误当然不容易,只有在无法改变你的概念时才应该使用这种方法。

最好的问候 d

答案 3 :(得分:0)

您可以在其网络模块中使用具有RPC机制的Qxt。您可以通过网络连接信号和插槽,并将任意类型的对象作为参数发送。你可以得到它here