当我们使用Qt的网络模块的时候,你可以选择你想要控制的层面。如果你只是想要通过网络获取文件,或者产生请求,你可以通过FTP或者HTTP来完成,使用Qt中的QHttp和QFtp类。这些类会处理很多的细节并提供给你高层次的操作接口。比如QHttp提供setHost和get。QFtp提供了connectToHost,login,get,和put操作。
当使用这些类的时候,你可以监听done信号,然后响应布尔类型的参数。如果它是true,那么会发生一个错误;否则,一切都运行良好。如果发生一个错误的话,你会从errorString中得到一个文本提示。
如果你需要控制网络中的底层,Qt提供了基于TCP和UDP的套接字的类。这两者的不同已经查过了本书所探讨的范围,可以简单的描述为:
TCP对于在两个电脑之间建立数据传输连接来讲是一个种可以信赖的方法。数据以流的方式传输。
UDP以包的形式发送数据。发送者不管接收者是否收到了数据,接收者也不知道它是否收到了所有的数据。独立的数据交换包称为数据报。
当实现一个TCP服务器的时候,你可以从QTcpServer类继承而来。简单的重新实现incomingConnection来处理新的连接。整数参数是套接字描述符。传递给QTcpSocket的构造函数来过去一个新连接的套接字。
通过listen方法设置监听的端口。指定QHostAddress::Any作为主机地址,服务器将接收所有的连接。
QTcpSocket即由服务器来使用也由客户端来使用。在客户端,用connectToHost来制定连接到的服务器和端口号。因为QTcpSocket继承自QIODevice类,你可以设置一个QDataStream或者QTextStream来发送接收数据。
当实现一个UDP服务器的时候,由创建一个QUdpSocket开始。你可以用writeDatagram往里写入数据。挡视线一个客户端的时候,使用同样的类,QUdpSocket,但是要用bind把它绑定到端口上。每个到达端口的数据包都会触发一个readyRead信号。你可以用readDatagram来读取数据包。
---------------
感觉和Linux下的网络编程略有不同的是,QT封装了N多东西 。对于套接字的编程似乎看起来方便一些,因为有信号触发机制,因此判断来没来数据比较方便,阻塞上比较好处理。
就是茫茫多的API,一开始完全不知道该用哪个。
通过网络套接字来实现linux下前后台程序之间的配合还是比较方便的方法,目前我能想到的~。