QT TCP实现简单的通信示例

本文实例为大家分享了QT TCP实现简单通信示例的具体代码,供大家参考,具体内容如下

TCP服务端:

第一步: 创建监听套接字的QTcpSever

QTcpServer *m_tsTcpServer;

第二步: listen------监听是否有新的连接进来

int iMyport;如果有新的客户端连接的话,会触发信号newConnection(),定义一个槽函数接收连接好的套接字.

//监听的端口号
iMyport = iPort;
//判断是否接收到了新的连接
if(m_tsTcpServer->listen(QHostAddress::Any,iMyport))
    {
        connect(m_tsTcpServer,SIGNAL(newConnection()),this,SLOT(slotServerNewConnection()));
    }
    else
    {
        qDebug() << "server listen error";
    }

第三步: 取出套接字

QTcpSocket *m_tsTcpSocket; 如果客户端有消息进来的话,会触发信号readyRead();断开连接的话会触发disconnected();

//获得连接客户端的SOCKET套接字
m_tsTcpSocket = m_tsTcpServer->nextPendingConnection();

//获取对方的IP和端口
QString sIp = m_tsTcpSocket->peerAddress().toString();
quint16 sPort = m_tsTcpSocket->peerPort();
qDebug() << sIp << sPort;

connect(m_tsTcpSocket,SIGNAL(readyRead()),this,SLOT(slotServerReadData()));
connect(m_tsTcpSocket, SIGNAL(disconnected()), this, SLOT(slotServerDisConnection()));

第四步: 读取套接字的内容

//从socket中读出数据
QByteArray baArray = m_tsTcpSocket->readAll();
QString sMsg = baArray;

到此服务端简单的通信搭建就完成了.

TCP客户端:

第一步: 创建套接字,与服务端的IP地址和端口号连接.注:这里的端口号和上面服务端绑定的那个端口号是一样的,别搞错了.

//连接服务端
m_tsTcpSocket->connectToHost(sIP,iPort);
//成功连接返回true,错误返回false
if(m_tsTcpSocket->waitForConnected())
    {
        qDebug() << "connect success";
    }
    //成功连接会触发槽函数 如果在找在这个槽函数里写write的话只能写一次,所以可以等连接成功后自己把写的函数放在自己想要发送的模块
    //connect(m_tsTcpSocket,SIGNAL(connected()),this,SLOT(slotConnectedSuccess()));

第二步: 连接成功后就可以直接向服务端发消息了.

QString str;
int iSize = m_tsTcpSocket->write(str.toUtf8().data());//返回字节的大小
//等待write写完再写下一次的write
    if(!m_tsTcpSocket->waitForBytesWritten(50000))
    {
        return;
    }
    //判断发送是否成功
    if(iSize ==-1)
    {
        qDebug() << "write error";
        return;
    }

到此客户端的简单通信就搭建好了.

若要多次向服务端发消息,可以while循环或者是其他.在这里要注意如果要多次发消息的话,waitForBytesWritten()这个函数是必不可少的,不然多次的话可能通信会失败.

注:write()函数和被触发的读的readyRead()信号并不是一一对应的,比如可能你客户端write了三次,服务端那边的readyRead可能才被触发一次.

想要了解详细的原因可以自己再去了解.

同理服务端向客服端发消息的话直接发送就可,服务端要收消息的话也是直接读就好,因为连接已经成功了.
相信小聪明脑袋瓜的你能懂的.

补充:客户端主动断开服务的连接

void TcpClient::disConnectSever()
{
    //方式一
    m_tcpSocket->flush();
    m_tcpSocket->disconnectFromHost();
    
    //方式二
    m_tcpSocket->abort();
}

注:方式二abort与方式一的区别:abort中止当前连接并重置套接字。与disConnectFromHost()不同,该函数会立即关闭套接字,丢弃写缓冲区中的所有挂起数据。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Qt中TCP协议通信详解

    TCP协议是经常使用的通信方式.在QT中做了非常友好的封装,使用非常方便. 需要添加的模块:network Qt中的TCP类:QTcpSocket , QTcpServer 常用函数介绍 连接目标地址和端口 virtual void QTcpSocket ::connectToHost(const QHostAddress &address, quint16 port, OpenMode mode = ReadWrite); 发送数据 inline qint64 QTcpSocket ::wri

  • Qt TCP网络通信学习

    TCP简介: Transmission Control Protocol,传输控制协议 .用于数据传输的低层网络协议,多个物联网协议都是基于TCP协议的.它是一个面向数据流和连接的可靠传输协议. TCP头部格式: QTcpSocket类为TCP提供了一个接口,继承自QAbstractSocket.可实现POP3.SMTP.NNTP等标准的网络协议,也可以实现自定义的网络协议.异步工作,依靠事件循环来检测到来的数据,并且自动刷新输出的数据.而QAbstractSocket继承自QIODevice,

  • QT实现简单TCP通信

    本文实例为大家分享了QT实现简单TCP通信的具体代码,供大家参考,具体内容如下 开发环境:win7开发软件:Qt5.5.0下图是实现效果 首先点击客户端的connect与服务器连接,连接成功后再服务器会显示“成功连接”,然后在客户端会显示“成功与服务器建立连接”,然后我们就可以分别在服务器和客户端向对方发送数据了. 1 TCP介绍 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的.可靠的.基于字节流的传输层通信协议. 在QT中的网络编程的过程如下

  • QT网络编程Tcp下C/S架构的即时通信实例

    先写一个客户端,实现简单的,能加入聊天,以及加入服务器的界面. #ifndef TCPCLIENT_H #define TCPCLIENT_H #include <QDialog> #include <QListWidget> #include <QLineEdit> #include <QPushButton> #include <QLabel> #include <QGridLayout> #include <QtNetWo

  • Qt网络编程实现TCP通信

    Qt网络编程实现TCP通信,供大家参考,具体内容如下 标签(空格分隔): Tcp通信 一.Tcp简介 (1)TCP(Transmission Control Protocol,传输控制协议)TCP是一个用于数据传输的传输层网络协议,多个网络协议包括(HTTP和FTP都是基于TCP协议),TCP是面向数据流和连接的可靠的传输协议,它区别于传输层的另外一个协议UDP(具体可看—Qt简单实现UDP通信) . (2)QTcpSocket继承自QAbstractSocket,与QUdpSocket传输的数

  • Qt实现简单的TCP通信

    这段时间用到了QT的TCP通信,做了初步的学习与尝试,编写了一个客户端和服务器基于窗口通信的小例程. 使用QT的网络套接字需要.pro文件中加入一句: QT += network 一.客户端 1.客户端的代码比服务器稍简单,总的来说,使用QT中的QTcpSocket类与服务器进行通信只需要以下5步: (1)创建QTcpSocket套接字对象 socket = new QTcpSocket(); (2)使用这个对象连接服务器 socket->connectToHost(IP, port); (3)

  • QT编写tcp通信工具(Server端)

    本文实例为大家分享了QT编写Server端的tcp通信工具的具体代码,供大家参考,具体内容如下 1.说明 使用qt写一个类似网上常见的网络调试工具.此篇为Server端.Client端在上一篇. 2.基本流程 新建QTcpServer对象,为其newConnection信号写槽函数.此为新的Client连接信号,在其对应槽函数里使用nextPendingConnection方法获取Client对象,并为Client添加readyRead(读数据),disconnected(断开连接)两个信号写槽

  • QT网络通信TCP客户端实现详解

    本文实例为大家分享了QT网络通信TCP客户端实现的具体代码,供大家参考,具体内容如下 QT中基于TCP套接字的网络通信需要用到两个类 QTcpServer:服务器类,用于监听客户端连接和客户端建立连接 QTcpSocket:通信套接字类,客户端和服务端都需要使用* 这两个类都属于网络通信的network需要在工程路径下添加network QT += core gui network 服务器 mainwindow.cpp #include "mainwindow.h" #include

  • QT5实现简单的TCP通信的实现

    目录 一.客户端 二.服务器 三.运行结果 这段时间用到了QT的TCP通信,做了初步的学习与尝试,编写了一个客户端和服务器基于窗口通信的小例程. 使用QT的网络套接字需要.pro文件中加入一句: QT += network 一.客户端 1.客户端的代码比服务器稍简单,总的来说,使用QT中的QTcpSocket类与服务器进行通信只需要以下5步: (1)创建QTcpSocket套接字对象 socket = new QTcpSocket(); (2)使用这个对象连接服务器 socket->connec

  • QT编写tcp通信工具(Client篇)

    本文实例为大家分享了QT编写tcp通信工具的具体实现代码,Client篇,供大家参考,具体内容如下 1.说明 使用qt写一个类似网上常见的网络调试工具.此篇为Client端.下一遍再写Server端. 2.基本流程 Client端相对简单:创建QTcpSocket对象,为对象的readyRead,error,connected(可选)分别写槽函数,以处理读数据,错误,连接成功三个事件. 连接使用对象的connectToHost方法,断开使用disconnectFromHost方法. 程序不做编码

随机推荐