Qt 中关于socket的读与写

来源:互联网 发布:mac pro 忘记开机密码 编辑:程序博客网 时间:2024/05/16 05:40

大部分是转载

 服务器端:

// server     #include "testnet.h"       #include "ui_testnet.h"       #include <QtGui>       Testnet::Testnet(QWidget *parent) :           QMainWindow(parent),           ui(new Ui::Testnet)       {           ui->setupUi(this);           this->connect(ui->pushButton_start,SIGNAL(clicked()),this,SLOT(startTcpserver()));           this->connect(ui->pushButton_send,SIGNAL(clicked()),this,SLOT(sendMessage()));       }     Testnet::~Testnet()       {           delete ui;       }     void Testnet::startTcpserver()       {           m_tcpServer = new QTcpServer(this);                  m_tcpServer->listen(QHostAddress::Any,19999); //监听任何连上19999端口的ip                  connect(m_tcpServer,SIGNAL(newConnection()),this,SLOT(newConnect())); //新连接信号触发,调用newConnect()槽函数,这个跟信号函数一样,其实你可以随便取。       }     void Testnet::newConnect()       {               m_tcpSocket = m_tcpServer->nextPendingConnection(); //得到每个连进来的socket               connect(m_tcpSocket,SIGNAL(readyRead()),this,SLOT(readMessage())); //有可读的信息,触发读函数槽     }      void Testnet::readMessage() //读取信息       {          QByteArray qba= m_tcpSocket->readAll(); //读取           qDebug()<<qba;           QString ss=QVariant(qba).toString();           ui->textEdit_rec->setText(ss);              }     void Testnet::sendMessage() //发送信息       {           QString strMesg= ui->lineEdit_sendmessage->text();           qDebug()<<strMesg;           m_tcpSocket->write(strMesg.toStdString().c_str(),strlen(strMesg.toStdString().c_str())); //发送       }    客户端:
// client     #include "testnet_c.h"       #include "ui_testnet_c.h"       testnet_c::testnet_c(QWidget *parent) :           QMainWindow(parent),           ui(new Ui::testnet_c)       {           ui->setupUi(this);                  this->connect(ui->pushButton_con,SIGNAL(clicked()),this,SLOT(connectServer()));           this->connect(ui->pushButton_send,SIGNAL(clicked()),this,SLOT(sendMesg()));       }              testnet_c::~testnet_c()       {           delete ui;       }        void testnet_c::connectServer()       {           m_tcpSocket = new QTcpSocket(this);           m_tcpSocket->abort();           m_tcpSocket->connectToHost("192.168.1.178",19999);                  connect(m_tcpSocket,SIGNAL(readyRead()),this,SLOT(readMesg()));       }     void testnet_c::readMesg() //读取信息       {          QByteArray qba =   m_tcpSocket->readAll();                 ui->textEdit_recmesg->clear();                 qDebug()<<qba;          QString ss=QVariant(qba).toString();          ui->textEdit_recmesg->setText(ss);       }     void testnet_c::sendMesg() //发送信息       {           QString ss= ui->lineEdit_sendmesg->text();           m_tcpSocket->write(ss.toStdString().c_str(),strlen(ss.toStdString().c_str()));           ui->lineEdit_sendmesg->clear();       }  
 
可见,在通信过程中,读信息需要检测信号,而写信息却可以直接进行 
	
				
		
原创粉丝点击