day07

来源:互联网 发布:淘宝双十一购物节方案 编辑:程序博客网 时间:2024/06/08 22:19
1 QT多线程
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
 
练习:实现网络室客户端
 

原创粉丝点击