QTcpSocket 从服务器接收数据

Posted

技术标签:

【中文标题】QTcpSocket 从服务器接收数据【英文标题】:QTcpSocket Receiving Data from server 【发布时间】:2013-03-19 03:19:07 【问题描述】:

是否可以从 QTcpSocket 读取未知形式的数据?

我的意思是,我有一个 TCP 客户端和服务器应用程序。两者都使用QDataStream成功交换数据包。

如果说任何其他应用程序(不是我创建的)通过相同的 IP 和端口向我的服务器发送数据,是否可以读取数据?

我知道除非它是使用 QDataStream 编写的,否则将无法读取它,但是我如何转储接收数据以便我可以更改我的代码以接受这种形式的数据?

最后我的问题是,使用 QTcpSocket 的服务器/客户端应用程序如何从未知的客户端/服务器应用程序读取(转储)数据?

希望我没有迷惑任何人。

【问题讨论】:

如果要处理纯数据,不要使用QDataStream,而是直接使用read()。 如何判断正在接收什么类型的数据?有什么功能可以检查吗? 不,如何解释数据是特定于协议的,取决于您 【参考方案1】:

我认为问题在于您正在使用 QDataStream 阅读,而不是您正在使用 QTcpSocket。在这种情况下,请使用 readRawData。这将忽略 QDataStream 预期的格式。

http://qt-project.org/doc/qt-4.8/qdatastream.html#readRawData

【讨论】:

我试过了。它正在读取所有字节,但是当我尝试显示时,它什么也没显示。 qDebug() << "Bytes Available: " << client->bytesAvailable();QDataStream in(client);char raw;qDebug() << in.readRawData(&raw, client->size()); "char raw" 只是一个字符,但您正在读取 client->size() 字节。使 QByteArray 原始; raw.resize(client->size()); readRawData(raw.data(), raw.size());要打印,最好使用 raw.toHex(),因为数据可能包含不可打印的字符。

以上是关于QTcpSocket 从服务器接收数据的主要内容,如果未能解决你的问题,请参考以下文章

QTcpSocket:解码接收到的数据

Qt笔记-解决QTcpSocket发送数据成功,但接收端接收不全的问

Qt笔记-解决QTcpSocket发送数据成功,但接收端接收不全的问题

QTcpSocket的连续发送数据和连续接收数据

接收不到 QTcpSocket 的 readyRead 信号?

qtcpsocket只能接收8KB字节的数据,该怎么解决