class XX:public QThread{
void run(void){
将在独立线程中执行。
}
};
XX threadx;
threadx.start();
2 线程同步
1)互斥量 QMutex
2)读写锁 QReadWriteLock
3)信号量 QSemaphore
4)条件等待 QWaitCondition
《案例》使用条件等待重构生产者和消费者案例
===========================
今天 QT网络编程
1 回顾linux网络编程
1)网络协议层次(linux四层/OSI七层)
应用层:http...
表示层:
会话层:
传输层:TCP、UDP
网络层:IPv4、IPv6协议
数据链路层:以太网协议
物理层
2)socket编程模型(TCP)
并发服务器(server)
-->创建套接字 socket(..)
-->准备服务器地址 struct sockaddr_in{...};
-->绑定套接字和服务器地址 bind()
-->监听客户端连接 listen(sfd,10)
-->等待和客户端的连接请求accept()
-->创建子进程/子线程用
accept返回的套接字和客户端进行
通信:write()/read() send()/recv()
-->关闭close()
客户端(client)
-->创建套接字socket(..)
-->准备服务器地址 struct sockaddr_in{...};
-->和服务器建立连接 connect
-->服务器进行通信
通信:write()/read() send()/recv()
-->关闭close()
============
3)UDP编程模式
服务器(server)
-->创建套接字 socket(..)
-->准备服务器地址 struct sockaddr_in{...};
-->绑定套接字和服务器地址 bind()
-->通信:recvfrom()/sendto()
-->close()
客户端(client)
-->创建套接字 socket(..)
-->准备服务器地址 struct sockaddr_in{...};
-->通信:recvfrom()/sendto()
-->close()
============================
《案例》获取网络地址信息
#include <QHostAddress>
#include <QHostInfo>
#include <QNetWorkInterface>
工程名:NetInfo
类名:NetInfoDialog
《案例》UDP网络广播
1)发送端
指定通信地址为广播地址(255.255.255.255)
指定广播端口:8888
输入广播消息,定时每隔1S发送一条广播消息
mkdir UdpBroadcast
cd UdpBroadcast
创建发送端工程名:Sender
创建发送端类名名:SenderDialog
2)接收端
绑定到指定端口
接收广播消息并显示到UI(QListWidget)
工程名:Receiver
类名:ReceiverDialog
======================
《案例》网络聊天室
1 服务器
1)使用QTcpServer创建并发服务器
2)保存所有和客户端通信的套接字
3)接收客户端的消息(read)
4)转发消息给所有的客户端(write)
2 客户端
1)QTcpSocket建立TCP客户端
2)指定(IP/端口)连接服务器
3)发送消息到服务器
4)接收聊天消息并显示
mkdir NetChat
cd NetChat
服务器的工程名:Server,类名ServerDialog
客户端的工程名:Client, 类名ClientDialog
练习:实现网络室客户端