继续上篇的Qt自带例程串口modbus调试(http://www.linuxdiyf.com/linux/22932.html)后进行的TCP-modbus调试,代码已经读的差不多,下篇会给出带码的简单注释。
1.调试环境
ubuntu16.04+Qt5.6.1,调试例程为Qt自带的slave和master两个程序,分别作为tcp-modbus的服务器和客户机。
找到例程:
2.遇到的问题
分别运行两个例程,没有权限打开本机IP端口(The socket is protected)
这个问题困扰了一整 天,从这个提示看不出什么原因,通过阅读Qt源代码,追踪到报错代码处
定位到代码段继续查找
查找 AddressProtectedErrorString
在Qt的帮助文档中查找SocketAccessError最后确定问题所在:The socket operation failed because the application lacked the required privileges.
翻译过来就是:套接字操作失败,因为应用程序缺乏所需的权限。
4.解决办法
找到了问题所在,就有办法解决了,linux权限问题一般就是在程序执行的时候加一个sudo,所以找到Qt debug后生成的可执行文件分执行就可以了。如 sudo ./modbusslave
5.最终调试结果
和串口的运得效果是一样的,下篇分析下Qt modbus例程源码。