2013-02-18 153 views
0

使用TCP套接字,我的客户端/服务器有一种情况,即客户端正在发送消息,服务器正在接收并将它们写入文件。我遇到的问题是由于某些原因,即使我将邮件拆分了,它们都在一条线上收到。Qt TcpSockets - 一次收到多个发送请求

因此,例如..说我在通过使用行发送一个文本文件行:

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

服务器有时接收多个消息都在一个接收。

因此,如果文本文件中说:

你好,

这是客户端

有时服务器将收到“您好,这是客户端”,接收这两个消息一起的时候,他们应该有已经分开。

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

回答

4

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

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

+0

这并没有真正回答我的问题,但它指出我在正确的方向,是准确的。谢谢! – Mitch 2013-02-21 08:22:46