zoukankan      html  css  js  c++  java
  • 简单Qt网络通信

    最近要用到Qt的Socket部分,网上关于这部分的资料都比较复杂,我在这总结一下,把Socket的主要部分提取出来,实现TCP和UDP的简单通信。

    1.UDP通信

    UDP没有特定的server端和client端,简单来说就是向特定的ip发送报文,因此我把它分为发送端和接收端。 注意:在.pro文件中要添加QT += network,否则无法使用Qt的网络功能

    1.1.UDP发送端

     1 #include <QtNetwork>
     2 QUdpSocket *sender;
     3 sender = new QUdpSocket(this);
     4 QByteArray datagram = “hello world!”;
     5 //UDP广播
     6 sender->writeDatagram(datagram.data(),datagram.size(),QHostAddress::Broadcast,6665);
     7 //向特定IP发送
     8 QHostAddress serverAddress = QHostAddress("10.21.11.66");
     9 sender->writeDatagram(datagram.data(), datagram.size(),serverAddress, 6665);
    10 /* writeDatagram函数原型,发送成功返回字节数,否则-1
    11 qint64 writeDatagram(const char *data,qint64 size,const QHostAddress &address,quint16 port)
    12 qint64 writeDatagram(const QByteArray &datagram,const QHostAddress &host,quint16 port)
    13 */
     

    1.2.UDP接收端

     1 #include <QtNetwork>
     2 QUdpSocket *receiver;
     3 //信号槽
     4 private slots:
     5 void readPendingDatagrams();
     6 receiver = new QUdpSocket(this);
     7 receiver->bind(QHostAddress::LocalHost, 6665);
     8 connect(receiver, SIGNAL(readyRead()),this, SLOT(readPendingDatagrams()));
     9 void readPendingDatagrams()
    10 {
    11 while (receiver->hasPendingDatagrams()) {
    12 QByteArray datagram;
    13 datagram.resize(receiver->pendingDatagramSize());
    14 receiver->readDatagram(datagram.data(), datagram.size());
    15 //数据接收在datagram里
    16 /* readDatagram 函数原型
    17 qint64 readDatagram(char *data,qint64 maxSize,QHostAddress *address=0,quint16 *port=0)
    18 */
    19 }
    20 }

    2.TCP通信

    TCP的话要复杂点,必须先建立连接才能传输数据,分为server端和client端。

    2.1.TCP client端

    1 #include <QtNetwork>
    2 QTcpSocket *client;
    3 char *data="hello qt!";
    4 client = new QTcpSocket(this);
    5 client->connectToHost(QHostAddress("10.21.11.66"), 6665);
    6 client->write(data);

    2.2.TCP server端

     1 #include <QtNetwork>
     2 QTcpServer *server;
     3 QTcpSocket *clientConnection;
     4 server = new QTcpServer();
     5 server->listen(QHostAddress::Any, 6665);
     6 connect(server, SIGNAL(newConnection()), this, SLOT(acceptConnection()));
     7 void acceptConnection()
     8 {
     9 clientConnection = server->nextPendingConnection();
    10 connect(clientConnection, SIGNAL(readyRead()), this, SLOT(readClient()));
    11 }
    12 void readClient()
    13 {
    14 QString str = clientConnection->readAll();
    15 //或者
    16 char buf[1024];
    17 clientConnection->read(buf,1024);
    18 }
  • 相关阅读:
    Spark调优之JVM调优
    hive连接MySQL报错
    Kafka安装
    Linux系统Mini版配置相关
    Linux系统完整安装在虚拟机Mini
    hive_异常_01_(未解决)FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoop.hbase.HTableDescriptor.addFamily(Lorg/apache/hadoop/hbase/HColumnDescriptor;)V
    HBase的详细安装部署
    MyCat实现数据库与数据库之间的读写分离
    git+github
    react--入门
  • 原文地址:https://www.cnblogs.com/suanec/p/4102555.html
Copyright © 2011-2022 走看看