客户端是用QT写的,利用QT(C++)中的QTcpSocket实现TCP传输的客户端一方;服务端是用python写的TCP传输的服务器。
QT部分:
UI主页面界面用到了QWebview(显示视频,同一局域网内只需打开http://树莓派ID:8080/?action=stream)、PushButton(控制小车移动和灯的开关),setting界面用到了Label、QPushButton、LineEdit(用于获取输入的地址和端口号)。这些界面的设计和信号与槽的连接在百度里有很多的例子可供学习,QT学习起来也相对简单。以下是
我写的界面,很糟见谅....
接下来主要讲TCP部分,想必socket编程大家都遇到过很多了,在QT中更是简单
步骤1:首先添加 头文件
include
步骤2:定义一个QTcoSocket对象
QTcpSocket tcpsocket;
步骤3:连接服务器
this->tcpsocket.connectToHost(“服务器地址”,“端口号”);
this->tcpsocket.waitForConnected(1000); //据说此行代码必须有,否则无法进行连接
步骤4:发送数据, if(this->tcpsocket.state()==QAbstractSocket::ConnectedState) //对应某个Button,比如上图的W键
{
this->tcpsocket.write("你要发的信息,比如前进后退等");
this->tcpsocket.waitForBytesWritten(300);//据说此行代码必须有,否则无法发送
}
else
...
步骤5:结束操作,断开连接
if(this->tcpsocket.state()==QAbstractSocket::ConnectedState)
{
this->tcpsocket.disconnectFromHost();
this->tcpsocket.waitForDisconnected(1000);
}
树莓派部分:
树莓派端上的服务器端是用python写的,python也是较为简单的,不过还是与C++,JAVA等的语法有点不同,以下代码不全都是按python的语法规则写的,示例而已
步骤1:导入socket库
import socket
步骤2:定义socket类型
raspiServer = socket.socket(scoket.AF_INET,socket.SOCK_STREAM) #定义socket类型,网络通信
raspiServer .bind((客户端地址,端口号))#客户端地址可以空即只绑定端口号
步骤3:开始TCP监听
while 1:
raspiServer.listen(1)#监听
while 1:
conn,addr=raspiServer.accept()
print 'connect by' addr
while 1:
try:
data=conn.recv(1024)#接收数据
print data #显示在屏幕中,以便测试是否能够通信
#然后处理数据,判断然后驱动小车移动
except socket.error,arg:
(errno,err_msg)=arg
print errno
if errno == 32:
break;
步骤4:关闭连接
conn.close()
两边的代码敲完后,将PC和树莓派放在局域网中(同一WIFI下即可),尝试是否可以通信。
有需要QT源码的可联系我。python的代码比较简单网上很多就不放出来了(毕竟 我也是网上学的....)
更新:2018/2/10
大家可自行下载源码,不必再邮件我,这样也比较方便,写的不是很好,仅供参考.
源码下载地址:http://download.csdn.net/download/hhf15980873586/10248483