fd_file.close(); } else if(buf[0] == '1') { QFile fd_file("/dev/fifoclient2"); QString temp(buf); if(fd_file.open(IO_WriteOnly|IO_Append)) { QTextStream t(&fd_file); t<< temp; } fd_file.close(); } ... ...
在该程序中,服务器接收底层发来的信息(这里假设也是由 FIFO 管道传来),然后根据收到的信息内容,如第一个字节的内容,将信息发到不同客户端的管道中,实现对信息的正确分发。
客户端程序示例如下:(假设服务器端已经为读而打开 /dev/fifo 管道)
QFile out_file("/dev/fifo"); if(out_file.open(IO_WriteOnly|IO_Append)) { TextStream t(&out_file); << text << "\n"; }
当任意一个客户端需要向服务器发送消息时,就可以通过 /dev/fifo 这个公共的管道发出。
通过这种方式,同样可以实现GUI内部不同进程或应用之间的通信过程,但是,当客户端数量较多时,这种方法就显示出了一定的局限性,整个通信过程布局变得过于繁杂,管道越来越多使得出错的可能性也越来越大。因此,利用 FIFO 实现 Qt 中上述客户端和服务器端的通信过程,更适用于客户端应用较少时。
参考资料
关于作者
续欣:博士、大学讲师,目前从事无线网络拥塞控制方面的研究,以及嵌入式GUI的开发。联系方式 xxin76@hotmail.com
(参考链接: http://www-128.ibm.com/developerworks/cn/linux/l-qtcommu/index.html)
|