【Y忍冬草】Qt之客户端实现数据的接收和发送
2018-01-12 11:12
501 查看
在使用通信功能时,需要在.pro工程中添加QT += network
相关代码:
tcpClient.h文件:
#ifndef TCPCLIENT_H #define TCPCLIENT_H #include <QWidget> #include <QtNetwork> namespace Ui { class TcpClient; } class TcpClient : public QWidget { Q_OBJECT public: explicit TcpClient(QWidget *parent = 0); ~TcpClient(); private slots: void NewConnect(); // 连接服务器 void ReadMessage(); // 接收数据 void SendMessage(); // 发送数据 void DisplayError(QAbstractSocket::SocketError); // 显示错误 void on_connectBtn_clicked(); private: Ui::TcpClient *ui; QTcpSocket *c_tcpSocket; QString c_readMsg; // 存放从服务器接收到的字符串 QString c_sendMsg; // 存放发送给服务器的字符串 }; #endif // TCPCLIENT_H
tcpClient.cpp文件:
#include "tcpclient.h" #include "ui_tcpclient.h" #include <QMessageBox> TcpClient::TcpClient(QWidget *parent) : QWidget(parent), ui(new Ui::TcpClient) { ui->setupUi(this); c_tcpSocket = new QTcpSocket(this); // 信号和槽的连接 connect(c_tcpSocket, SIGNAL(readyRead()), this, SLOT(ReadMessage())); connect(c_tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(DisplayError(QAbstractSocket::SocketError))); // connect(c_tcpSocket, SIGNAL(connected()), this, SLOT(SendMessage())); connect(ui->sendBtn, SIGNAL(clicked()), this, SLOT(SendMessage())); } TcpClient::~TcpClient() { delete ui; } void TcpClient::NewConnect() { c_tcpSocket->abort(); // 取消已有的连接 c_tcpSocket->connectToHost("192.168.1.111", 60000); // 连接到服务器 if (c_tcpSocket->waitForConnected(5000)) { // QString str = QString::fromLocal8Bit("通信成功!\n"); ui->readMsg->setText(tr("通信成功!\n")); } else { // QString::fromLocal8Bit("通信失败!") QMessageBox::critical(this, "Client", tr("通信失败!")); } } void TcpClient::ReadMessage() { // 读取数据 while (c_tcpSocket->bytesAvailable() > 0) { QByteArray inBlock; // 设置数据大小为读取的数据大小 inBlock.resize(c_tcpSocket->bytesAvailable()); c_tcpSocket->read(inBlock.data(), inBlock.size()); c_readMsg = QString(inBlock); // 显示接收到的数据 ui->readMsg->setText(c_readMsg); } } void TcpClient::SendMessage() { c_sendMsg = ui->sendMsg->text(); // 发送数据 c_tcpSocket->write(c_sendMsg.toLatin1(), c_sendMsg.length()); c_tcpSocket->waitForBytesWritten(); ui->sendMsg->clear(); } void TcpClient::DisplayError(QAbstractSocket::SocketError) { // 输出错误信息 QString str = c_tcpSocket->errorString(); ui->errorMsg->setText(str); c_tcpSocket->close(); } // 连接按钮 void TcpClient::on_connectBtn_clicked() { NewConnect(); // 请求连接 }
相关下载:
http://download.csdn.net/download/y363703390/10202019
相关文章推荐
- 数据报实现简单的客户端发送数据,服务端接收数据
- MQTT Java客户端Eclipse paho实现数据的发送和接收
- Scoket异步套接字编程,在客户端实现数据的发送和接收
- UDP客户端实现在不同端口上发送和接收数据
- MQTT Java客户端Eclipse paho实现数据的发送和接收
- 简单socket服务(三)实现多客户端向服务器发送数据并保证服务器接收到数据
- ios客户端向服务器端发送数据以及接收数据要如何实现?
- java 实现jms的客户端(发送接收消息)
- LWIP和DDR3配合实现 数据接收和发送(zedboard)
- QTcpSocket 发送和接收数据的几种方法
- TCP与UDP的异同(服务端接收数据,客户端发送数据)
- Qt采用Qextserialport 接收发送16进制数据
- C# Scoket异步通讯实现(发送数据、接收数据)
- java netty 服务端向客户端发送16进制数据,客户端无法接收-已解决
- java实现http协议发送和接收数据
- Qt5 基于TCP传输的发送/接收文件服务器(支持多客户端)
- QT中用udp客户端发送消息,丢失数据的情况以及处理!
- TCP带外数据学习总结(概念,发送接收过程,数据到达检测,代码实现)
- socket服务器发送大数据,客户端循环接收
- 客户端读取本地文件的数据,发送到服务器,服务器接收并存储到文件中