c++ - Qt Tcp Socket - 一次接收多个发送

标签 c++ qt sockets tcp delay

使用 TCP 套接字,我的客户端/服务器有一种情况,消息从客户端发送,服务器接收消息并将它们写入文件。我遇到的问题是出于某种原因,即使我将消息分开,它们都是在一条线上收到的。

例如..假设我使用以下方式逐行发送文本文件:

socket->write(msg.toUtf8().constData());
    socket->waitForBytesWritten(5000);

服务器有时会在一次接收中收到多条消息。

所以如果文本文件说:

你好,

这是客户

有时服务器会收到“你好,这是客户端”,在它们应该分开的时候一起接收两条消息。

有人可能会说我当时编码有误,但奇怪的是,如果我在本地测试客户端/服务器,一切都完美无缺。一旦我通过网络执行此操作,这个问题就会开始发生。我做了一些测试,在发送消息之间增加了延迟。这也解决了问题,但只是在我将每条消息的延迟增加到近 1 秒之后。如果需要发送大量消息,这是一个问题,每条 1 秒最终需要很长时间。

最佳答案

请记住,TCP 是一种 协议(protocol)。没有自然的消息边界,数据只是字节流。

如果您希望消息被分开,您必须在 TCP 之上添加一个包含这些边界的协议(protocol)。对于文本,换行符是一个自然的边界,并在许多基于文本的协议(protocol)中使用。

关于c++ - Qt Tcp Socket - 一次接收多个发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14931722/

相关文章:

c++ - 为什么下面的程序会挂起?

c++ - 在 C++Builder 中使用 swprintf 打印窄字符串

c++ - 从 QGraphicsScene 移除 Qpixmap

qt - PyQt QWebkit Javascript Function.bind 不存在(ECMAScript 5 缺失函数)

Qt for Symbian - 检测触摸/非触摸设备

c# - 如何在C#中的同一线程上监听standard in和套接字?

c++ - AVFormatContext 错误 : I can't get the AVFormatContext

c++ - 如何从另一个指针指向的内存地址获取数据?

java - 从套接字读取字符串

java - 通过 Socket 进行流传输