qt-udp协议编程
来源:互联网 发布:登录我的淘宝 编辑:程序博客网 时间:2024/05/29 18:01
作者: 使徒保罗
邮箱: 297329588szh@163.com
声明: 欢迎交流学习,如有任何疑问,请通过邮箱联系本人
应用场景: qt udp通信
开发环境: windows10 64位+qt5.7(mingw).exe
注意:
本文有服务器端和客户端程序代码组成,各位同学可以先跑服务器程序,然后跑客户端程序就可以看到通信效果了.
udp client:
pro文件增加network模块:
QT += core network
udpclient.h:
#ifndef UDPCLIENT_H
#define UDPCLIENT_H
#include <QUdpSocket>
class UdpClient : public QObject
{
Q_OBJECT
public:
explicit UdpClient(QObject *parent = 0);
~UdpClient();
void setPort(quint16 nPort);
void setIPAndPort(QString strIP, quint16 nPort);
qint64 SendData(const char *data, qint64 size);
qint64 SendData(const QByteArray &datagram);
signals:
public slots:
void slotOnSocketErr();
private:
quint16 m_nTargetPort;
QHostAddress m_targetHostAddress;
QUdpSocket* m_pUdpSocket;
};
#endif // UDPCLIENT_H
udpclient.cpp
#include "udpclient.h"
UdpClient::UdpClient(QObject *parent) : QObject(parent)
{
m_pUdpSocket = new QUdpSocket(this);
connect(m_pUdpSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(slotOnSocketErr()));
}
UdpClient::~UdpClient()
{
if(m_pUdpSocket)
{
m_pUdpSocket->deleteLater();
}
}
void UdpClient::setPort(quint16 nPort)
{
m_nTargetPort = nPort;
}
void UdpClient::setIPAndPort(QString strIP, quint16 nPort)
{
m_targetHostAddress.setAddress(strIP);
m_nTargetPort = nPort;
}
/*
* @return: Returns the number of bytes sent on success; otherwise returns -1
*
*/
qint64 UdpClient::SendData(const char *data, qint64 size)
{
qint16 nRet = -1;
if(data == NULL || size <= 0)
{
return nRet;
}
nRet = m_pUdpSocket->writeDatagram(data, size, m_targetHostAddress, m_nTargetPort);
return nRet;
}
/*
* @return: Returns the number of bytes sent on success; otherwise returns -1
*
*/
qint64 UdpClient::SendData(const QByteArray &datagram)
{
qint16 nRet = -1;
if(datagram.size() <= 0)
{
return nRet;
}
nRet = m_pUdpSocket->writeDatagram(datagram, m_targetHostAddress, m_nTargetPort);
return nRet;
}
void UdpClient::slotOnSocketErr()
{
qDebug("socket err: %s errcode=%d", m_pUdpSocket->errorString().toStdString().c_str(), m_pUdpSocket->error());
}
udpclient main.cpp
#include <QCoreApplication>
#include <udpclient.h>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
UdpClient client;
client.setIPAndPort("127.0.0.1", 6000);
char szMsg[] = "Hello world!";
qint16 nBytes = client.SendData(szMsg, sizeof(szMsg));
if(-1 == nBytes)
{
qDebug("send failed.\n");
}
else
{
qDebug("send success. bytes size = %d\n", nBytes);
}
return a.exec();
}
udpserver :
pro增加network模块
QT += core network
udpserver.h
#ifndef UDPSERVER_H
#define UDPSERVER_H
#include <QUdpSocket>
class UdpServer : public QObject
{
Q_OBJECT
public:
explicit UdpServer(quint16 nPort, QObject *parent = 0);
signals:
public slots:
void slotOnSocketErr();
void slotReadPendingDatagrams();
private:
QUdpSocket* m_pUdpSocket;
};
#endif // UDPSERVER_H
udpserver.cpp
#include "udpserver.h"
UdpServer::UdpServer(quint16 nPort, QObject *parent) : QObject(parent)
{
m_pUdpSocket = new QUdpSocket(this);
QHostAddress hostAddress = m_pUdpSocket->localAddress();
if(!m_pUdpSocket->bind(hostAddress, nPort))
{
qDebug("udp server bind port failed.");
}
connect(m_pUdpSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(slotOnSocketErr()));
connect(m_pUdpSocket, SIGNAL(readyRead()),this, SLOT(slotReadPendingDatagrams()));
}
void UdpServer::slotOnSocketErr()
{
qDebug("socket err: %s errcode=%d", m_pUdpSocket->errorString().toStdString().c_str(), m_pUdpSocket->error());
}
void UdpServer::slotReadPendingDatagrams()
{
while (m_pUdpSocket->hasPendingDatagrams()) {
QHostAddress senderIp;
quint16 senderPort;
QByteArray datagram;
datagram.resize(m_pUdpSocket->pendingDatagramSize());
if (m_pUdpSocket->readDatagram(datagram.data(), datagram.size(),
&senderIp, &senderPort) == -1)
{
continue;
}
qDebug("recv data: %s len=%d\n",datagram.data(), datagram.size());
}
}
udpserver mian.cpp
#include <QCoreApplication>
#include "udpserver.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
UdpServer server(6000);
return a.exec();
}
阅读全文
0 0
- qt-udp协议编程
- QT网络编程-UDP
- QT之UDP编程
- QT中的UDP编程
- Qt的UDP编程
- QT UDP网络编程
- Qt 网络编程-UDP
- 网络编程--UDP协议
- 实现UDP协议编程
- Socket编程-UDP协议
- 网络编程UDP协议
- Udp协议编程
- JAVA UDP协议编程
- UDP协议编程
- UDP协议编程
- [QT] UDP协议演示实例
- QT开发之UDP协议
- QT 的UDP SOCKET编程
- 深入学习Android——AIDL机制
- java解析PDF文件,并获取到指定数据.Eg
- HBase原理-数据读取流程解析
- Webmagic爬虫--②爬自己的CSDN博客列表
- CentOS(Red Hat内核)MongoDB3.4企业版安装
- qt-udp协议编程
- Textview文字闪烁效果(Runnable和Timer两种实现方法)
- 人工智能的三个层次
- Integer等包装类判断相等
- Android的异步消息处理机制---Handler机制总结
- cow2转raw
- iOS OpenGL ES2.0 开发实例 (转载)
- Python 面向对象 编程(一)
- 电子凭证 : Java 生成 Pdf