基于qt+wiringPi pca9685开发系列——qt-qt的socket通讯

  • 1061368165@qq.c
  • LV5工程师
  • |      2017-09-20 21:39:20
  • 浏览量 718
  • 回复:0
本帖最后由 1061368165@qq.com 于 2017-9-20 21:48 编辑 关于qt、wiringPi 和pca9685的原理可以看我上一个帖子,这里不在赘述: 基于qt+wiringPi pca9685开发系列——简单的qt控制界面 下面分享的是关于qt和qt的远程连接方案。 学过linux编程的同学都知道,tcp socket连接分为这几步: server: (1)创建套接字(socket) (2)将套接字绑定到一个本地地址和端口上(bind) (3)将套接字设为监听模式,准备接收客户端请求(listen) (4)等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept) (5)用返回的套接字和客户端进行通信(send/recv) (6)循环或关闭套接字。(close) client: (1)创建套接字(socket) (2)向服务器发出连接请求(connect) (3)和服务器端进行通信(send/recv) (4)关闭套接字(close) 对于server: 对于qt在创建,listen初始化的时候同时完成了bind的操作:
tcpServer->listen(QHostAddress::Any,6000);
accept动作也被槽函数、信号代替:
connect(tcpServer,SIGNAL(newConnection()),this,SLOT(sendmsg()));
newConnect()就是有设备接入时产生的信号,这时候调用sendmsg()函数。 在sendmsg()函数里面,我们建立QTcpSocket成员,通过nextPendingConnection读取返回的QTcpSocket。
QTcpSocket *clientConnection=tcpServer->nextPendingConnection();
为保证客户端没有在此期间断开连接,可以设置当断开连接的时候调用的槽函数:
connect(clientConnection, SIGNAL(disconnect()), clientConnem_tcpSocketction, SLOT(deleteLater()));
向客户端传输数据只需要像读写文件那样write就行了,读取可以通过readAll()读取QString变量:
clientConnection->write("block");

QString str=tcpSocket->readAll();
最后断开客户端连接:


(这里我已经无力吐槽,之所以这么久没用更主要是来来去去说我有非法字符,最后用排除法找出这么一段???黑人问号,这句代码怎么了,为什么非法?) 可以调用像上一篇文章那样的iic_pca.h里面的初始化函数和通讯函数: pca9685_init pca9685_setmk 对于client: 创建QTcpSocket 对象之后,可以通过connectToHost连接到目标服务器:
tcpSocket->connectToHost("192.168.155.2", 6000);
connect连接:
connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readmsg()));
读取数据槽函数:
tcpSocket->write(tr(""));
pro文件: 加上下面两句:
QT      += network



LIBS    +=  -lwiringPi
QT += network是为了获取操作网络的权限,否则程序是流畅运行,但客户端就是无法连接上。LIBS += -lwiringPi连接到wiringPi库 ps:代码的源文件找不到了,似乎随着上次树莓派的文件系统损坏一块丢失了,以后补上。
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:0
x
收藏成功!点击 我的收藏 查看收藏的全部帖子