0

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

因此,例如..说我使用以下命令逐行发送文本文件:

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

服务器有时会同时接收多条消息。

所以如果文本文件说:

你好,

这是客户

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

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

4

1 回答 1

4

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

如果你想分离消息,你必须在 TCP 之上添加一个包含这些边界的协议。对于文本,换行符是一个自然边界,并在许多基于文本的协议中使用。

于 2013-02-18T08:01:39.283 回答