TCP/IP协议通信步骤:
服务端
创建服务器套接字,
绑定服务器IP,端口,设置其为被动监听模式,
accpet返回连接成功的套接字,一种特殊额I/O接口,也是文件描述符,用数据传输的.
recv() send()接受发送数据
客户端:
创建套接字
Connect请求连接服务器,
send() recv();
UDP通信:
服务端:
创建socket
绑定地址:让客户端知道往哪发送数据 bind
接受/发送数据 recvfrom sendto
结束连接:close
客户端:
创建socket
Sendto recvfrom
Close
注意:如果服务器程序就绪后,就要像客户端发送数据,那么客户端就要绑定地址端口,不能让
操作系统随机分配. 因为UDP在创建套接字后直接使用sendto(),隐含操作是,在发送数据之前
操作系统会为该套接字随机分配一个合适的udp端口,将该套接字和本地地址信息绑定
1.获取本地IP地址,然后以定义的格式打包IP地址,端口号
QString datagramStr = QString("autorock-alive") + ":" + hostIP + ":" +QString::number(HOSTPORT);
- 然后初始化网络
使QTcpServer套接字处于被动监听模式,接收到客户端连接请求后,返回QTcpSocket套接字,这个套接字时一种特殊的I/O接口,也是一种文件描述符.
设置接收端缓冲区大小为1024*1024 1024.
创建三个套接字用于与HUD通信,然后请求连接.
定时广播本地IP地址端口包(2000ms)
这里面使用了三个通信通道,
第一个通道是传输导航背景大图片的.(1024*1024)
第二个通道是传输小图标,转向,车道,路口的图片
第三个通道是转向提示信息和语音交互信息(文字信息UTF-8编码的)
协议格式:Autorock-head+len(8byte数据长度)+len2(4byte哪种类型枚举表示)+图片数据
第二个通道信息有多种信息,需要根据不同类型的数据,显示到某个地方.
QQuickImageProvider类的使用:
QQuickImageProvider类提供了一个用于在QML中支持pixmaps和线程图像请求的接口。
QQuickImageProvider用于在QML应用程序中提供高级图像加载功能。 它允许QML中的图像为:使用QPixmaps而不是实际图像文件加载
engine.rootContext()->setContextProperty("client",stream);
engine.addImageProvider(QLatin1String("screen"),stream->imgProvider);
Connections {
target:client
onCallQmlRefeshImg: {
screenImg.source = ""
screenImg.source = "image://screen"
}
}