本文首发在我的个人博客“宅到没朋友”,欢迎来玩!
-什么是序列化
序列化是把实体对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。
反序列化是从有序字节流中重建对象,恢复对象状态。
-为什么需要序列化与反序列化
通过序列化将类对象以字节流形式在网络中进行传递和接收,简化了网络传输的代码编写。
-QT中的序列化
QDataStream实现了原生类型的序列化(QString、QMap、QHash等),对于自己定义的结构体或类,必须重载<<和>>操作符,通过对基本对象的序列化来实现所定义结构体或类的序列化。
之后使用QDataStream类对象的setDevice()方法将QDataStream和QTcpSocket绑定在一起,然后可以使用<<操作符写数据,使用>>操作符读数据。
-QT网络传输
重点介绍QTcpServer和QTcpSocket类,之后再接受QT实现网络传输的几种方式。
QTcpServer使得监听并接收TCP连接成为可能,你可以在特定网络地址的特定端口监听所有TCP连接。一般来讲我们自己的服务器类需要继承QTcpServer类并覆写它的incomingConnection(qint socketDescriptor)方法。
重点介绍一下incomingConnection方法,该方法是个虚方法,当有新连接可用时该方法被QTcpServer自动调用,soc