做网站的去哪找客户,正规制作网站公司,怎么买域名做企业网站,长沙网站建设报价文章目录 qt中TCP的实现 qt中TCP的实现 学习视频 QT中可以通过TCP协议让服务器和客户端之间行通信。服务器和客户端的具体流程 下方的信号都是系统提供的#xff0c;我们只需要写相应的槽函数
A、服务器#xff1a;
创建QTcpServer对象启动服务器#xff08;监听… 文章目录 qt中TCP的实现 qt中TCP的实现 学习视频 QT中可以通过TCP协议让服务器和客户端之间行通信。服务器和客户端的具体流程 下方的信号都是系统提供的我们只需要写相应的槽函数
A、服务器
创建QTcpServer对象启动服务器监听调用成员方法listenQHostAddress::Any,端口号当有客户端链接时候会发送newConnection()信号触发自定义槽函数接受链接使用nextPendingConnection() 与客户端建立连接得到一个与客户端通信的套接字QTcpSocketQTcpsocket发送数据用成员方法write读数据当客户端有数据来QTcpSocket对象就会发送readyRead()信号触发自定义槽函数读取数据
B、客户端
创建QTcpSocket对象链接服务器connectToHost(QHostAddress(ip),端口号)QTcpsocket发送数据用成员方法write读数据当对方有数据来QTcpSocket对象就会发送readyRead()信号触发自定义槽函数读取数据
直接上源码
此代码在vs2017环境下写的会有详细注释仔细阅读代码
先添加network模块 测试效果 textSever.h
#pragma once#include QtWidgets/QMainWindow
#include ui_textSever.h
#include QTcpServer.h
#include QTcpSocket.hclass textSever : public QMainWindow
{Q_OBJECTpublic:textSever(QWidget *parent nullptr);~textSever();signals:public slots:void new_connect();// 有新的连接void rev_mag();// 接收发送过来的消息void send_mag();// 发送消息private:Ui::textSeverClass ui;QTcpServer* severSocket;// 监听套接字QTcpSocket* clientSocket;// 通信套接字
};
textSever.cpp
#include textSever.htextSever::textSever(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);// 初始化 uiui.sIP-setText(127.0.0.1);ui.sPort-setText(9999);// 初始化套接字severSocket new QTcpServer(this);// 监听套接字 监听本地severSocket-listen(QHostAddress(ui.sIP-text()), ui.sPort-text().toInt());// 当有新的连接的时候会触发 newConnection 信号connect(severSocket, QTcpServer::newConnection, this, textSever::new_connect);
}textSever::~textSever()
{}void textSever::new_connect() {// 有点像客户端的套接字 accept// 连接客户端clientSocket severSocket-nextPendingConnection();// ui.record-append(有新的连接。。。。。);在vs中会有乱码ui.record-append(QString::fromLocal8Bit(有新的连接。。。。。));// 当客户端有消息发送过来的时候就会触发 readyRead 信号connect(clientSocket, QTcpSocket::readyRead, this, textSever::rev_mag);// 点击按钮向客户端发送数据connect(ui.sendBtn, QPushButton::clicked, this, textSever::send_mag);
}void textSever::rev_mag()
{// 接收数据QByteArray array clientSocket-readAll();ui.record-append(array);
}void textSever::send_mag()
{//发送数据clientSocket-write(ui.msg-toPlainText().toUtf8().data());ui.record-append(Me Say: ui.msg-toPlainText());// 清除发送框的消息ui.msg-clear();
}
textClient.h
#pragma once#include QMainWindow
#include ui_textClient.h
#include QTcpSocket.h
#include QHostAddress.hclass textClient : public QMainWindow
{Q_OBJECTpublic:textClient(QWidget *parent nullptr);~textClient();signals:public slots:void rev_mag();// 接收发送过来的消息void send_mag();// 发送消息private:Ui::textClientClass ui;QTcpSocket* clientSocket;
};
textClient.cpp
#include textClient.htextClient::textClient(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);//初始化clientSocket new QTcpSocket(this);// 初始化 uiui.sIP-setText(127.0.0.1);ui.sPort-setText(9999);//连接服务器 这个是非阻塞方式连接不上也不管clientSocket-connectToHost(QHostAddress(ui.sIP-text()), ui.sPort-text().toInt());// 接收数据connect(clientSocket, QTcpSocket::readyRead, this, textClient::rev_mag);// 发送数据connect(ui.sendBtn, QPushButton::clicked, this, textClient::send_mag);}textClient::~textClient()
{}void textClient::rev_mag()
{QByteArray array clientSocket-readAll();ui.record-append(array);
}void textClient::send_mag()
{clientSocket-write(ui.msg-toPlainText().toUtf8().data());ui.record-append(my say : ui.msg-toPlainText());ui.msg-clear();
}
main.cpp
#include textSever.h
#include textClient.h
#include QtWidgets/QApplicationint main(int argc, char *argv[])
{//对于按钮文字显示不全的解决方法必须放在main中的第一行QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);QApplication a(argc, argv);textSever w;w.setWindowTitle(QString::fromLocal8Bit(服务器));w.show();textClient c;c.setWindowTitle(QString::fromLocal8Bit(客户端));c.show();return a.exec();
}