Qt5 Demo Fortune例程各个实现区别(network)

来源:互联网 发布:交易师炒股软件下载 编辑:程序博客网 时间:2024/05/16 16:59

1.Fortune Server/Client Example

Server服务器调用tcpsocket的Listen()监听是否有来自客户端连接,

当Client客户端通过connectToHost()连接到Server后,Server端由QTcpSocket *clientConnection = tcpServer->nextPendingConnection()

创建基于该连接对象的套接字,通过write(block)向客户端发送数据。

优点:简洁明了,代码少

缺点:如果发送数据太频繁,太大,对于主线程的压力可想而知。实际工程中,数据通信多是放在单独的线程中使用。



2.Blocking Fortune Client

两个主类,一个是BlockingClient,继承自QDialog,负责窗体搭建,响应用户操作等,就是GUI主线程。

另一个FortuneThread类继承自QThread,QTcpSocket对象创建在FortuneThread的run函数中。用户需要接收数据的时候,通过BlockingClient

向FortuneThread发送一个请求,通过线程连接到主机,FortuneThread接收到来自主机的数据在通过信号槽返回给主线程。这种客户端使用阻塞模式

很常见。

BlockClient调用一个全局thread来操作,使用互斥锁(QMutex)来解决竞争。



3.Thread Fortune Server Example

对每个客户机的请求创建一个单独的线程来进行响应。我们不再需要互斥锁来保护资源。

Dialog类负责界面绘制,通过server.listen()开启FortuneServer监听事件,一旦有客户机连接上,server通过IncomingConnection()开启一个新的

线程FortuneThread,该线程负责将Fortune发送给客户端,之后销毁。


0 0
原创粉丝点击