十九、TCP和UDP通信
1、QTcpServer
tcp服务端的使用
(1)在pro文件中添加network模块
(2)定义槽函数,为QTcpServer对象的newConnection信号绑定槽函数,来监听客户端的新连接
(3)在槽函数中使用nextPendingConnection方法动态创建一个QTcpSocket对象
(4)为QTcpSocket对象的readyRead信号绑定槽函数,每次有客户端发送来新的消息便会触发此信号
(5)为QTcpSocket对象的stateChanged信号绑定槽函数,接收连接状态
(6)在连接状态的槽函数中创建QTcpSocket临时指针对象,使用sender方法来获取连接的客户端,sender方法返回发送信号的对象,然后使用deleteLater方法,释放客户端连接,避免内存浪费
(7)打印客户端ip地址使用QTcpSocket对象的peerAddress方法获取QHostAddress,然后使用toString方法转换为字符串,peerPort方法获取客户端端口,使用QString的静态方法number将端口转换为字符串
(8)使用QTcpSocket对象的read和write方法读取和发送数据
(9)QTcpServer的findChildren方法可以获取到连接的所有客户端的QTcpSocket对象
(10)QTcpServer的listen方法能够监听ip地址和端口,close方法停止监听,表示不会有新连接能连上,已经连接的客户端依旧能够发送消息
QTextBrowser:文本浏览框
2.QTcpSocket客户端
(1)创建对象
(2)接收消息绑定信号和槽readyRead信号
(3)连接状态改变的信号绑定槽函数,进行相应操作,stateChanged信号
(4)使用connectToHost函数连接服务器
(5)使用disconnectFromHost函数断开与服务器的连接
3.QUdpSocketUDP通信
(1)创建QUdpSocket对象
(2)为readyRead信号绑定槽
(3)pendingDatagramSize函数获取接收到数据的大小
(4)hasPendingDatagrams函数判断是否有数据报到来
(5)readDatagram函数读取指定ip和端口的主机发送的数据报
(6)bind函数绑定本机端口和ip
(7)abort函数解除本机绑定
(8)writeDatagram函数向指定主机的端口发送数据报
(9)QHostAddress::Broadcast表示广播,向局域网中的所有主机端口发送
(10)连接状态BoundState