当前位置:首页 > 物联网 > 网络协议
[导读]   UDP是无连接的不可靠的传输协议,可以用在可靠传输不是很重要的情况下使用。 QUdpSocket是QAbstractSocket 的子类,它们都继承了QIODevice。所以可以用QUdpS

  UDP是无连接的不可靠的传输协议,可以用在可靠传输不是很重要的情况下使用。 QUdpSocket是QAbstractSocket 的子类,它们都继承了QIODevice。所以可以用QUdpSocket进行发送接收数据。它和QTcpSocket最大的区别也就是,发送数据之前不需要建立连接

  以下简单例子,演示了用QUdpSocket如何实现客户端和服务端的通信。

  服务端代码:

  [cpp] view plain copy

  1. class UDPServer:public QObject

  2. {

  3. Q_OBJECT

  4. public:

  5. UDPServer(QObject *parent = NULL);

  6. ~UDPServer();

  7. private slots:

  8. void readPendingDatagrams();

  9. private:

  10. QUdpSocket *udpSocket;

  11.

  12. };

  [cpp] view plain copy

  1. UDPServer::UDPServer(QObject *parent /* = NULL */):QObject(parent)

  2. {

  3. udpSocket = new QUdpSocket(this);

  4. udpSocket-》bind(QHostAddress::LocalHost, 7755);

  5. cout《《“Server is Running.。。。。。”《《endl;

  6. connect(udpSocket, SIGNAL(readyRead()),this, SLOT(readPendingDatagrams()));

  7. }

  8.

  9. UDPServer::~UDPServer()

  10. {

  11.

  12. }

  13.

  14. void UDPServer::readPendingDatagrams()

  15. {

  16. QHostAddress sender;

  17. quint16 senderPort;

  18. while (udpSocket-》hasPendingDatagrams())

  19. {

  20. QByteArray datagram;

  21. datagram.resize(udpSocket-》pendingDatagramSize());

  22. udpSocket-》readDatagram(datagram.data(), datagram.size(),&sender, &senderPort);

  23. string strMes(datagram);

  24. std::cout《《strMes《《endl;

  25. }

  26. QString text = “hello 。。。”;

  27. QByteArray datagram = text.toLocal8Bit();

  28. udpSocket-》writeDatagram(datagram.data(),datagram.size(),sender, senderPort);

  29. }

  说明:

  1. 我都是在自己的机器上测试,所以服务器地址都是localHost。即

  [cpp] view plain copy

  udpSocket-》bind(QHostAddress::LocalHost, 7755);

  2. 给客户端回发信息

  [cpp] view plain copy

  udpSocket-》writeDatagram(datagram.data(),datagram.size(),sender, senderPort);

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭