qt网络编程

哈啤嘿嘿 贡献于2017-05-24

作者 Administrator  创建于2015-02-11 20:51:16   修改者哈啤嘿嘿  修改于2015-02-11 20:51:16字数3082

文档摘要:Qt 提供了 QTcpSocket 类和 QTcpServer 类用于编写 tcp 客户端和服务器应用程序。
关键词:

TCP 网络编程 TCP 协议客户与服务器程序编写流程图 TCP客户端 初始化套字节 连接 发送  建立连接 三次握手 接收 数据请求 发送 TCP服务器 初始化套字节 绑定 监听 数据应答 数据处理 接收 接收 文件结束通知 关闭 关闭 接受连接 阻塞直到客户连接到达 首先启动服务器,稍后启动客户端,它与此服务器经过三次握手后建立连接,此后一段时 间内,客户端向服务器发送一个请求,服务器处理这个请求,并且给客户端发回一个响应 这个过程一直持续下去,直到客户端给服务器发送一个文件结束符,关闭客户端连接,接 着服务器也关闭服务器 Qt 提供了 QTcpSocket 类和 QTcpServer 类用于编写 tcp 客户端和服务器应用程序。 QTcpSocket 类 提供了 TCP 协议的通用接口,可以用来实现其他标准协议,也采用了异步工作方式 。 依靠 Qt 时间循环发现外来数据和向外发送数据,并以信号的方式报告状态改变或产生 错误。 QTcpSocket 通 过 其 父 类 QAbstractSocket 继 承 了 QIODevice 类 , 因 为 可 以 用 QTextStream 和 QDataStream 这样的流结构类,这样大大方便了 TCP 数据流的读写 QTcpServer 类 处理服务器外来的 TCP 连接 该类直接继承于 QObject 基类,而不是 QAbstracSocket 抽象套字节类 QHostAddress 类 代表 IP 地址信息,并提供了 IP 地址和 IP 字符串相互转换的方法 例如:QHostAddress::Any; QHostAddress ip; ip.setAddress("192.168.1.70"); tcp 网络服务端: 在 QtCreator 集成开发环境创建 TcpServer 工程界面如下 tcpserver.h 文件 #ifndef TCPSERVER_H #define TCPSERVER_H #include #include #include namespace Ui { class TcpServer; } class TcpServer : public QMainWindow { Q_OBJECT public: explicit TcpServer(QWidget *parent = 0); ~TcpServer(); private slots: void sendMessage(); private: Ui::TcpServer *ui; QTcpServer *tcpServer; }; #endif // TCPSERVER_H tcpserver.cpp 文件 #include "tcpserver.h" #include "ui_tcpserver.h" TcpServer::TcpServer(QWidget *parent) : QMainWindow(parent), ui(new Ui::TcpServer) { ui->setupUi(this); tcpServer = new QTcpServer(this); if(!tcpServer->listen(QHostAddress::Any,6666)) { //监听本地主机的 6666 端口,如果出错就输出错误信息,并关闭 qDebug() << tcpServer->errorString(); close(); } //当有客户端连接时候会发生 newConnection()信号 connect(tcpServer,SIGNAL(newConnection()),this,SLOT(sendMessage())); } TcpServer::~TcpServer() { delete ui; } void TcpServer::sendMessage() { //我们获取已经建立的连接的子套接字 QTcpSocket *clientConnection = tcpServer->nextPendingConnection(); connect(clientConnection,SIGNAL(disconnected()),clientConnection,\ SLOT(deleteLater())); clientConnection->write("Hello Tcp"); clientConnection->disconnectFromHost(); //发送数据成功后,显示提示 ui->label->setText("send message successful!!!"); } tcp 网络客户端: 在 QtCreator 集成开发环境创建 TcpClient 工程界面如下 tcpclient.h 文件 #ifndef TCPCLIENT_H #define TCPCLIENT_H #include #include namespace Ui { class TcpClient; } class TcpClient : public QMainWindow { Q_OBJECT public: explicit TcpClient(QWidget *parent = 0); ~TcpClient(); private slots: void on_pushButton_clicked(); void readMessage(); //接收信息 void displayError(QAbstractSocket::SocketError); //出错处理 private: Ui::TcpClient *ui; QTcpSocket *tcpSocket; }; #endif // TCPCLIENT_H tcpclient.cpp 文件 #include "tcpclient.h" #include "ui_tcpclient.h" TcpClient::TcpClient(QWidget *parent) : QMainWindow(parent), ui(new Ui::TcpClient) { ui->setupUi(this); //初始化套子节 tcpSocket = new QTcpSocket(this); //当接到数据的时候发送 readyRead 信号 connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readMessage())); connect(tcpSocket,SIGNAL(error(QAbstractSocket::SocketError)), this,SLOT(displayError(QAbstractSocket::SocketError))); } TcpClient::~TcpClient() { delete ui; } void TcpClient::on_pushButton_clicked() { tcpSocket->abort(); //取消已有的连接 //连接服务器 tcpSocket->connectToHost(ui->hostLineEdit->text(),\ ui->portLineEdit->text().toInt()); } void TcpClient::readMessage() { //将接收到的数据存放到变量中 QString msg = tcpSocket->readAll(); //显示接收到的数据 ui->messageLabel->setText(msg); } void TcpClient::displayError(QAbstractSocket::SocketError) { qDebug() << tcpSocket->errorString(); //输出错误信息 } 运行结果

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档