2011-02-05 27 views
0

问题是关于Qt服务器的架构。 例如,有一个插槽ReadyRead()当插座信号readyRead() 如果有几种我们可以Qt TcpServer架构

void Server::ReadyRead() 
{ 
    QString msg = readFirstWordFromAvaiableData(); 
    switch (msg){ 
     case "PING": 
     case "GET": // and so on 
    } 
} 

我想请求的是没有其他办法做到这一点被调用。我想这不是可扩展和舒适的。

如果我想要服务器与Java,C,Perl等编写的客户端一起工作,我应该只使用QByteArray,对吗?在来自QtDemo客户端的所有样本中,在消息之前发送消息的大小。有必要吗?

如果你建议我抽取一些用Qt编写的服务器(在github,bitbucket等上),那将会很不错。我想看看生产服务器是如何安排的。

回答

2

如果您的每个命令都有固定长度的有效负载,则可能不需要发送消息长度。

QByteArray是一个方便的无符号字符数组的封装,并且有一些有用的实用方法,所以这是一件好事。如果您的协议是基于文本的,您也可以使用QString,但请注意默认情况下QString是Unicode,所以一个字符需要2个字节而不是1个字节。你可以使用适当的转换函数(QString :: fromUtf8,QString :: fromAscii等)。

如果您还没有这样做,我会先建议看看examples in Qt documentation。没有任何其他例子可以推荐。