摘要:你可以暂停发送和接收数据的显示。定时器自动发送。同时支持嵌入式草莓派等。效果图四开源主页以上作品的完整源码下载都在开源主页上,作品的数量和质量都会不断更新。欢迎关注。这个开源项目已经成功升级到版本,分门别类,图文并茂,会让你觉得很棒。
第一,前言是网络通信收发数据不可或缺的。为了截取数据,判断数据是否正确,经常使用网络数据相关的调试工具。类似的工具早就发布了。第一版大概是2013年,第二版大概是2017年。中间提到了很多网络调试助手,有的叫网络调试工具等等。个人觉得野人之家的NetAssist是最好的,小巧,绿色,功能强大。
中间很多网友提出了很多建议,比如为什么没有Udp客户端,只有Udp服务器。实际上Udp通信是无连接的,也就是说QUdpSocket既是客户端又是服务器。但是根据很多用户的操作习惯和编程对称的规律,用多盘磁带做了一个Udp客户端。现在Websocket也很流行。客户端工具和网页之间的通信可以直接使用Socket等机制。而且从Qt5开始,WebSocket模块就有了,用起来非常简单。封装的QWebSocket和QWebSocketServer(很奇怪这里不叫QWebServer?)而且QTcpSocket,QTcpServer,QUdpSocket的用法也差不多。
二、Tcp客户端模块的主要功能。Tcp服务器模块。Udp客户端模块。Udp服务器模块。WebSocket客户端模块。WebSocket服务器模块。服务器支持多个客户端连接。Ascii字符数据的发送和接收。Hex16数据收发器。支持Utf8中文数据收发。您可以指定网卡IP地址绑定。您可以暂停发送和接收数据的显示。定时器自动发送。您可以将数据发送到单个联机连接,或者选中所有要发送的连接。可以配置常用的发送数据(send.txt),自动从配置文件加载数据,从下拉框发送数据。可以启用设备模拟应答(device.txt),当接收到某一数据时,模拟设备自动应答应答数据。从自动配置文件中加载最终接口设置。同时支持Qt4、Qt5、Qt6。同时支持win、linux、mac、嵌入式linux、Raspberry Pi等。每个模块功能都是一个独立的表单,可以很容易的直接更新,这样需要多少就更新多少,用户可以任意指定动态创建多个客户端和服务器。三、效果图
四。开源主页以上作品的完整源码下载都在开源主页上,作品的数量和质量都会不断更新。欢迎关注。这个开源项目已经成功升级到V2.0版本,分门别类,图文并茂,让你乐在其中。Qt开源武林秘籍开发经验,看了学,起薪20K,你没找我!国内站点:https://gitee.com/feiyangqingyun/QWidgetDemo国际站点:https://github.com/feiyangqingyun/QWidgetDemo开源秘籍:https://gitee.com/feiyangqingyun/ Qtkaifajingyan个人主页:https://qtchina.blog.csdn.net/知乎主页:https://www.zhihu.com/people/feiyangqingyun/ v .核心代码//第一步:实例化对应的类TCP socket = new QTcpSocket(this);connect(tcpSocket,SIGNAL(connected()),this,SLOT(connected());connect(tcpSocket,SIGNAL(error(QAbstractSocket::SocketError))、this、SLOT(disconnected());connect(tcpSocket,SIGNAL(disconnected()),this,SLOT(disconnected());connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(read data());tcpServer =新的TCP server(this);connect(tcpServer,SIGNAL(clientConnected(QString,int))、this、SLOT(clientConnected(QString,int)));connect(tcpServer,SIGNAL(client disconnected(QString,int))、this、SLOT(client disconnected(QString,int)));connect(tcpServer,SIGNAL(sendData(QString,int,QString))、this、SLOT(sendData(QString,int,QString)));connect(tcpServer,SIGNAL(receiveData(QString,int,QString))、this、SLOT(receiveData(QString,int,QString)));UDP socket = new qudp socket(this);connect(udpSocket,SIGNAL(readyRead()),this,SLOT(read data());//第二步:发送和接收数据void FRM TCP Client::READ DATA(){ q byte Array DATA = TCP socket -> READ ALL();if(data . length()buffer = qui helper::byteArrayToHexStr(data);} else if(App::AsciiTcpClient){ buffer = qui helper::byteArrayToAsciiStr(data);} else { buffer = QString(data);} append(1,缓冲区);//自动回复数据。可以回复的数据是基于;分开了,每行可以带一个以上;所以不需要继续判断if(app::debug TCP client){ int count = app::keys . count();for(int I = 0;I send data(App::values . at(I));打破;} } } } void frmUdpClient::readData(){ QHostAddress host;quint16端口;QByteArray数据;QString缓冲区;while(UDP socket -> haspending datagrams()){ data . resize(UDP socket -> pending datagramsize());UDP socket -> read datagram(data . data(),data.size(),&host,& port);if(App::HexReceiveUdpClient){ buffer = qui helper::byteArrayToHexStr(data);} else if(App::AsciiUdpClient){ buffer = qui helper::byteArrayToAsciiStr(data);} else { buffer = QString(data);} QString IP = host . tostring();ip = ip.replace("::ffff:"," ");if(IP . isempty()){ continue;} QString str = QString("[%1:%2] %3 ")。参数(ip)。参数(端口)。arg(缓冲区);append(1,str);if(App::DebugUdpClient){ int count = App::keys . count();for(int I = 0;i sendData(ip,port,App::values . at(I));打破;} } } }}
评论前必须登录!
注册